Problem p03283 (C++)

Buggy submission (status: Runtime Error):
#include <bits/stdc++.h>
using namespace std;
using ll = long long int;

#define REP(i, n) FOR(i, 0, n)
#define FOR(i, s, n) for (int i = (s), i##_len = (n); i < i##_len; ++i)

#define isvisiblechar(c) (0x21 <= (c) && (c) <= 0x7E)
#define cin scanner
#define cout printer
namespace {
class MaiScanner {
public:
  template <typename T> void input_integer(T &var) {
    var = 0;
    T sign = 1;
    int cc = getchar_unlocked();
    for (; cc < '0' || '9' < cc; cc = getchar_unlocked())
      if (cc == '-')
        sign = -1;
    for (; '0' <= cc && cc <= '9'; cc = getchar_unlocked())
      var = (var << 3) + (var << 1) + cc - '0';
    var = var * sign;
  }
  inline int c() { return getchar_unlocked(); }
  inline MaiScanner &operator>>(int &var) {
    input_integer<int>(var);
    return *this;
  }
  inline MaiScanner &operator>>(long long &var) {
    input_integer<long long>(var);
    return *this;
  }
  inline MaiScanner &operator>>(string &var) {
    int cc = getchar_unlocked();
    for (; !isvisiblechar(cc); cc = getchar_unlocked())
      ;
    for (; isvisiblechar(cc); cc = getchar_unlocked())
      var.push_back(cc);
    return *this;
  }
  template <typename IT> void in(IT begin, IT end) {
    for (auto it = begin; it != end; ++it)
      *this >> *it;
  }
};
class MaiPrinter {
public:
  template <typename T> void output_integer(T var) {
    if (var == 0) {
      putchar_unlocked('0');
      return;
    }
    if (var < 0)
      putchar_unlocked('-'), var = -var;
    char stack[32];
    int stack_p = 0;
    while (var)
      stack[stack_p++] = '0' + (var % 10), var /= 10;
    while (stack_p)
      putchar_unlocked(stack[--stack_p]);
  }
  inline MaiPrinter &operator<<(char c) {
    putchar_unlocked(c);
    return *this;
  }
  inline MaiPrinter &operator<<(int var) {
    output_integer<int>(var);
    return *this;
  }
  inline MaiPrinter &operator<<(long long var) {
    output_integer<long long>(var);
    return *this;
  }
  inline MaiPrinter &operator<<(char *str_p) {
    while (*str_p)
      putchar_unlocked(*(str_p++));
    return *this;
  }
  inline MaiPrinter &operator<<(const string &str) {
    const char *p = str.c_str();
    const char *l = p + str.size();
    while (p < l)
      putchar_unlocked(*p++);
    return *this;
  }
  template <typename IT> void join(IT begin, IT end, char sep = ' ') {
    for (bool b = 0; begin != end; ++begin, b = 1)
      b ? *this << sep << *begin : *this << *begin;
  }
};
} // namespace
MaiScanner scanner;
MaiPrinter printer;

//
// Binary Indexed Tree 2D
//
// verified:
//   AOJ 2842 たい焼きマスターと食べ盛り
//     http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2842
//
template <class Abel> struct BIT2D {
  const Abel UNITY_SUM = 0; // to be set
  vector<vector<Abel>> dat;

  BIT2D(int n = 1, int m = 1) : dat(n + 1, vector<Abel>(m + 1, UNITY_SUM)) {}
  void init(int n, int m) { dat.assign(n + 1, vector<Abel>(m + 1, UNITY_SUM)); }

  /* add x on the point (a, b) */
  inline void add(int a, int b, Abel x) {
    for (int i = a; i < (int)dat.size(); i += i & -i)
      for (int j = b; j < (int)dat[0].size(); j += j & -j)
        dat[i][j] = dat[i][j] + x;
  }

  inline Abel sum(int p, int q) {
    Abel res = UNITY_SUM;
    for (int i = p; i > 0; i -= i & -i)
      for (int j = q; j > 0; j -= j & -j)
        res = res + dat[i][j];
    return res;
  }

  /* a1 <= x < b1, a2 <= y < b2, 1-indexd */
  inline Abel sum(int a1, int a2, int b1, int b2) {
    return sum(b1 - 1, b2 - 1) - sum(a1 - 1, b2 - 1) - sum(b1 - 1, a2 - 1) +
           sum(a1 - 1, a2 - 1);
  }

  /* debug */
  void print() {
    for (int i = 1; i < (int)dat.size(); ++i) {
      for (int j = 1; j < (int)dat[0].size(); ++j)
        cout << sum(i, j, i + 1, j + 1) << ",";
      cout << "¥n";
    }
  }
};

int main(void) {
  int N, M, Q;
  cin >> N >> M >> Q;
  BIT2D<int> bt(M + 1, M + 1);
  REP(i, M) {
    int l, r;
    cin >> l >> r;
    bt.add(l, r, 1);
  }
  REP(i, Q) {
    int p, q;
    cin >> p >> q;
    cout << bt.sum(p, p, q + 1, q + 1) << "\n";
  }

  return 0;
}


Fixed submission:
#include <bits/stdc++.h>
using namespace std;
using ll = long long int;

#define REP(i, n) FOR(i, 0, n)
#define FOR(i, s, n) for (int i = (s), i##_len = (n); i < i##_len; ++i)

#define isvisiblechar(c) (0x21 <= (c) && (c) <= 0x7E)
#define cin scanner
#define cout printer
namespace {
class MaiScanner {
public:
  template <typename T> void input_integer(T &var) {
    var = 0;
    T sign = 1;
    int cc = getchar_unlocked();
    for (; cc < '0' || '9' < cc; cc = getchar_unlocked())
      if (cc == '-')
        sign = -1;
    for (; '0' <= cc && cc <= '9'; cc = getchar_unlocked())
      var = (var << 3) + (var << 1) + cc - '0';
    var = var * sign;
  }
  inline int c() { return getchar_unlocked(); }
  inline MaiScanner &operator>>(int &var) {
    input_integer<int>(var);
    return *this;
  }
  inline MaiScanner &operator>>(long long &var) {
    input_integer<long long>(var);
    return *this;
  }
  inline MaiScanner &operator>>(string &var) {
    int cc = getchar_unlocked();
    for (; !isvisiblechar(cc); cc = getchar_unlocked())
      ;
    for (; isvisiblechar(cc); cc = getchar_unlocked())
      var.push_back(cc);
    return *this;
  }
  template <typename IT> void in(IT begin, IT end) {
    for (auto it = begin; it != end; ++it)
      *this >> *it;
  }
};
class MaiPrinter {
public:
  template <typename T> void output_integer(T var) {
    if (var == 0) {
      putchar_unlocked('0');
      return;
    }
    if (var < 0)
      putchar_unlocked('-'), var = -var;
    char stack[32];
    int stack_p = 0;
    while (var)
      stack[stack_p++] = '0' + (var % 10), var /= 10;
    while (stack_p)
      putchar_unlocked(stack[--stack_p]);
  }
  inline MaiPrinter &operator<<(char c) {
    putchar_unlocked(c);
    return *this;
  }
  inline MaiPrinter &operator<<(int var) {
    output_integer<int>(var);
    return *this;
  }
  inline MaiPrinter &operator<<(long long var) {
    output_integer<long long>(var);
    return *this;
  }
  inline MaiPrinter &operator<<(char *str_p) {
    while (*str_p)
      putchar_unlocked(*(str_p++));
    return *this;
  }
  inline MaiPrinter &operator<<(const string &str) {
    const char *p = str.c_str();
    const char *l = p + str.size();
    while (p < l)
      putchar_unlocked(*p++);
    return *this;
  }
  template <typename IT> void join(IT begin, IT end, char sep = ' ') {
    for (bool b = 0; begin != end; ++begin, b = 1)
      b ? *this << sep << *begin : *this << *begin;
  }
};
} // namespace
MaiScanner scanner;
MaiPrinter printer;

//
// Binary Indexed Tree 2D
//
// verified:
//   AOJ 2842 たい焼きマスターと食べ盛り
//     http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2842
//
template <class Abel> struct BIT2D {
  const Abel UNITY_SUM = 0; // to be set
  vector<vector<Abel>> dat;

  BIT2D(int n = 1, int m = 1) : dat(n + 1, vector<Abel>(m + 1, UNITY_SUM)) {}
  void init(int n, int m) { dat.assign(n + 1, vector<Abel>(m + 1, UNITY_SUM)); }

  /* add x on the point (a, b) */
  inline void add(int a, int b, Abel x) {
    for (int i = a; i < (int)dat.size(); i += i & -i)
      for (int j = b; j < (int)dat[0].size(); j += j & -j)
        dat[i][j] = dat[i][j] + x;
  }

  inline Abel sum(int p, int q) {
    Abel res = UNITY_SUM;
    for (int i = p; i > 0; i -= i & -i)
      for (int j = q; j > 0; j -= j & -j)
        res = res + dat[i][j];
    return res;
  }

  /* a1 <= x < b1, a2 <= y < b2, 1-indexd */
  inline Abel sum(int a1, int a2, int b1, int b2) {
    return sum(b1 - 1, b2 - 1) - sum(a1 - 1, b2 - 1) - sum(b1 - 1, a2 - 1) +
           sum(a1 - 1, a2 - 1);
  }

  /* debug */
  void print() {
    for (int i = 1; i < (int)dat.size(); ++i) {
      for (int j = 1; j < (int)dat[0].size(); ++j)
        cout << sum(i, j, i + 1, j + 1) << ",";
      cout << "¥n";
    }
  }
};

int main(void) {
  int N, M, Q;
  cin >> N >> M >> Q;
  BIT2D<int> bt(N, N);
  REP(i, M) {
    int l, r;
    cin >> l >> r;
    bt.add(l, r, 1);
  }
  REP(i, Q) {
    int p, q;
    cin >> p >> q;
    cout << bt.sum(p, p, q + 1, q + 1) << "\n";
  }

  return 0;
}