Problem p04002 (C++)

Buggy submission (status: Memory Limit Exceeded):
/* template.cpp [[[ */
#include <bits/stdc++.h>
using namespace std;
#define get_macro(a, b, c, d, name, ...) name
#define rep(...) get_macro(__VA_ARGS__, rep4, rep3, rep2, rep1)(__VA_ARGS__)
#define rrep(...)                                                              \
  get_macro(__VA_ARGS__, rrep4, rrep3, rrep2, rrep1)(__VA_ARGS__)
#define rep1(n) rep2(i_, n)
#define rep2(i, n) rep3(i, 0, n)
#define rep3(i, a, b) rep4(i, a, b, 1)
#define rep4(i, a, b, s) for (ll i = (a); i < (ll)(b); i += (ll)s)
#define rrep1(n) rrep2(i_, n)
#define rrep2(i, n) rrep3(i, 0, n)
#define rrep3(i, a, b) rrep4(i, a, b, 1)
#define rrep4(i, a, b, s) for (ll i = (ll)(b)-1; i >= (ll)(a); i -= (ll)s)
#define each(x, c) for (auto &&x : c)
#define fs first
#define sc second
#define all(c) begin(c), end(c)
using ui = unsigned;
using ll = long long;
using ul = unsigned long long;
using ld = long double;
const int inf = 1e9 + 10;
const ll inf_ll = 1e18 + 10;
const ll mod = 1e9 + 7;
const ll mod9 = 1e9 + 9;
const int dx[]{-1, 0, 1, 0, -1, 1, 1, -1};
const int dy[]{0, -1, 0, 1, -1, -1, 1, 1};
template <class T, class U> void chmin(T &x, const U &y) { x = min<T>(x, y); }
template <class T, class U> void chmax(T &x, const U &y) { x = max<T>(x, y); }
struct prepare_ {
  prepare_() {
    cin.tie(nullptr);
    ios::sync_with_stdio(false);
    cout << fixed << setprecision(12);
  }
} prepare__;
ll in() {
  ll x;
  cin >> x;
  return x;
}
vector<ll> in(size_t n) {
  vector<ll> v(n);
  each(x, v) cin >> x;
  return v;
}
/* ]]] */

int h, w, n;
int a[100000], b[100000];
map<pair<int, int>, int> s;
ll c[10];

int main() {
  cin >> h >> w >> n;
  rep(i, n) cin >> a[i] >> b[i], a[i]--, b[i]--;
  rep(i, n) rep(j, -2, 3) rep(k, -2, 3) {
    if (j == 0 && k == 0)
      s[{a[i], b[i]}] += 1;
    else
      s[{a[i] + j, b[i] + k}] += 0;
  }
  auto ss = s;
  int cn = 0;
  each(p, ss) {
    if (p.fs.fs < 0 || p.fs.sc < 0)
      continue;
    if (p.fs.fs + 3 > h || p.fs.sc + 3 > w)
      continue;
    cn++;
    int t = 0;
    rep(i, 3) rep(j, 3) t += s[{p.fs.fs + i, p.fs.sc + j}];
    c[t]++;
  }
  c[0] += (ll)(h - 2) * (w - 2) - cn;
  rep(i, 10) cout << c[i] << endl;
}


Fixed submission:
/* template.cpp [[[ */
#include <bits/stdc++.h>
using namespace std;
#define get_macro(a, b, c, d, name, ...) name
#define rep(...) get_macro(__VA_ARGS__, rep4, rep3, rep2, rep1)(__VA_ARGS__)
#define rrep(...)                                                              \
  get_macro(__VA_ARGS__, rrep4, rrep3, rrep2, rrep1)(__VA_ARGS__)
#define rep1(n) rep2(i_, n)
#define rep2(i, n) rep3(i, 0, n)
#define rep3(i, a, b) rep4(i, a, b, 1)
#define rep4(i, a, b, s) for (ll i = (a); i < (ll)(b); i += (ll)s)
#define rrep1(n) rrep2(i_, n)
#define rrep2(i, n) rrep3(i, 0, n)
#define rrep3(i, a, b) rrep4(i, a, b, 1)
#define rrep4(i, a, b, s) for (ll i = (ll)(b)-1; i >= (ll)(a); i -= (ll)s)
#define each(x, c) for (auto &&x : c)
#define fs first
#define sc second
#define all(c) begin(c), end(c)
using ui = unsigned;
using ll = long long;
using ul = unsigned long long;
using ld = long double;
const int inf = 1e9 + 10;
const ll inf_ll = 1e18 + 10;
const ll mod = 1e9 + 7;
const ll mod9 = 1e9 + 9;
const int dx[]{-1, 0, 1, 0, -1, 1, 1, -1};
const int dy[]{0, -1, 0, 1, -1, -1, 1, 1};
template <class T, class U> void chmin(T &x, const U &y) { x = min<T>(x, y); }
template <class T, class U> void chmax(T &x, const U &y) { x = max<T>(x, y); }
struct prepare_ {
  prepare_() {
    cin.tie(nullptr);
    ios::sync_with_stdio(false);
    cout << fixed << setprecision(12);
  }
} prepare__;
ll in() {
  ll x;
  cin >> x;
  return x;
}
vector<ll> in(size_t n) {
  vector<ll> v(n);
  each(x, v) cin >> x;
  return v;
}
/* ]]] */

int h, w, n;
int a[100000], b[100000];
map<pair<int, int>, int> s;
ll c[10];

int main() {
  cin >> h >> w >> n;
  rep(i, n) cin >> a[i] >> b[i], a[i]--, b[i]--;
  rep(i, n) rep(j, -2, 1) rep(k, -2, 1) {
    if (j == 0 && k == 0)
      s[{a[i], b[i]}] += 1;
    else
      s[{a[i] + j, b[i] + k}] += 0;
  }
  auto ss = s;
  int cn = 0;
  each(p, ss) {
    if (p.fs.fs < 0 || p.fs.sc < 0)
      continue;
    if (p.fs.fs + 3 > h || p.fs.sc + 3 > w)
      continue;
    cn++;
    int t = 0;
    rep(i, 3) rep(j, 3) t += s[{p.fs.fs + i, p.fs.sc + j}];
    c[t]++;
  }
  c[0] += (ll)(h - 2) * (w - 2) - cn;
  rep(i, 10) cout << c[i] << endl;
}