Problem p00729 (C++)

Buggy submission (status: Memory Limit Exceeded):
#include <algorithm>
#include <bitset>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <functional>
#include <iomanip>
#include <iostream>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <tuple>
#include <vector>

using namespace std;

inline int toInt(string s) {
  int v;
  istringstream sin(s);
  sin >> v;
  return v;
}
inline bool cheak(int x, int y, int xMax, int yMax) {
  return x >= 0 && y >= 0 && xMax > x && yMax > y;
}
template <class T> inline string toString(T x) {
  ostringstream sout;
  sout << x;
  return sout.str();
}
template <class T> inline T sqr(T x) { return x * x; }

typedef pair<int, int> P;
typedef tuple<int, int, int> T;
typedef long long ll;
typedef unsigned long long ull;

#define For(i, a, b) for (int(i) = (a); i < (b); (i)++)
#define rep(i, n) For(i, 0, n)
#define clr(a) memset((a), 0, sizeof(a))
#define mclr(a) memset((a), -1, sizeof(a))
#define all(a) (a).begin(), (a).end()
#define sz(a) (sizeof(a))
#define Fill(a, v) fill((int *)a, (int *)(a + (sz(a) / sz(*(a)))), v)

const int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
const int mod = 1000000007;
const int INF = 1e9;

int d[10001][2000];
int f[10001][1001];

int main() {
  int N, M;

  while (cin >> N >> M && N) {
    int r;
    cin >> r;

    clr(d);
    clr(f);

    rep(i, r) {
      int t, n, m, s;
      cin >> t >> n >> m >> s;
      if (s == 1) {
        f[m][n] = t;
      } else {
        For(j, f[m][n], t) { d[m][j] = 1; }
      }
    }

    int q;
    cin >> q;

    rep(i, q) {
      int ts, te, m;
      cin >> ts >> te >> m;
      int ans = 0;
      For(j, ts, te) {
        if (d[m][j])
          ans++;
      }
      cout << ans << endl;
    }
  }

  return 0;
}

Fixed submission:
#include <algorithm>
#include <bitset>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <functional>
#include <iomanip>
#include <iostream>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <tuple>
#include <vector>

using namespace std;

inline int toInt(string s) {
  int v;
  istringstream sin(s);
  sin >> v;
  return v;
}
inline bool cheak(int x, int y, int xMax, int yMax) {
  return x >= 0 && y >= 0 && xMax > x && yMax > y;
}
template <class T> inline string toString(T x) {
  ostringstream sout;
  sout << x;
  return sout.str();
}
template <class T> inline T sqr(T x) { return x * x; }

typedef pair<int, int> P;
typedef tuple<int, int, int> T;
typedef long long ll;
typedef unsigned long long ull;

#define For(i, a, b) for (int(i) = (a); i < (b); (i)++)
#define rep(i, n) For(i, 0, n)
#define clr(a) memset((a), 0, sizeof(a))
#define mclr(a) memset((a), -1, sizeof(a))
#define all(a) (a).begin(), (a).end()
#define sz(a) (sizeof(a))
#define Fill(a, v) fill((int *)a, (int *)(a + (sz(a) / sz(*(a)))), v)

const int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
const int mod = 1000000007;
const int INF = 1e9;

bool d[10001][2000];
short f[10001][1001];

int main() {
  int N, M;

  while (cin >> N >> M && N) {
    int r;
    cin >> r;

    clr(d);
    clr(f);

    rep(i, r) {
      int t, n, m, s;
      cin >> t >> n >> m >> s;
      if (s == 1) {
        f[m][n] = t;
      } else {
        For(j, f[m][n], t) { d[m][j] = 1; }
      }
    }

    int q;
    cin >> q;

    rep(i, q) {
      int ts, te, m;
      cin >> ts >> te >> m;
      int ans = 0;
      For(j, ts, te) {
        if (d[m][j])
          ans++;
      }
      cout << ans << endl;
    }
  }

  return 0;
}