Problem p02599 (C++) — buggy submission, verdict: Time Limit Exceeded

#include <bits/stdc++.h>

using namespace std;

#define fRead(x) freopen(x, "r", stdin)
#define fWrite(x) freopen(x, "w", stdout)

#define LL long long
#define ULL unsigned long long
#define ff first
#define ss second
#define pb push_back
#define PI acos(-1.0)
#define mk make_pair
#define pii pair<int, int>
#define pll pair<LL, LL>

#define min3(a, b, c) min(a, min(b, c))
#define max3(a, b, c) max(a, max(b, c))
#define min4(a, b, c, d) min(a, min(b, min(c, d)))
#define max4(a, b, c, d) max(a, max(b, max(c, d)))
#define SQR(a) ((a) * (a))
#define FOR(i, a, b) for (int i = a; i <= b; i++)
#define ROF(i, a, b) for (int i = a; i >= b; i--)
#define REP(i, b) for (int i = 0; i < b; i++)
#define MEM(a, x) memset(a, x, sizeof(a))
#define ABS(x) ((x) < 0 ? -(x) : (x))

#define SORT(v) sort(v.begin(), v.end())
#define REV(v) reverse(v.begin(), v.end())
#pragma GCC target("avx2")
#pragma GCC optimization("O3")
#pragma GCC optimization("unroll-loops")
#pragma comment(linker, "/stack:200000000")
#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#define FastRead                                                               \\
  ios_base::sync_with_stdio(0);                                                \\
  cin.tie(nullptr);
#ifdef VAMP
#define debug(...) __f(#__VA_ARGS__, __VA_ARGS__)
template <typename Arg1> void __f(const char *name, Arg1 &&arg1) {
  cout << name << " = " << arg1 << std::endl;
}
template <typename Arg1, typename... Args>
void __f(const char *names, Arg1 &&arg1, Args &&...args) {
  const char *comma = strchr(names + 1, ',');
  cout.write(names, comma - names) << " = " << arg1 << " | ";
  __f(comma + 1, args...);
}
#else
#define debug(...)
#endif

const int N = 500005;
int ara[N + 5];
int cnt[N + 5];
struct Data {
  int l, r, id;
};
Data Q[N + 5];
int answer[N + 5];
int sq;
bool cmp(Data A, Data B) {
  if (A.l / sq != B.l / sq)
    return A.l / sq < B.l / sq;
  return A.r < B.r;
}
int value;
void add(int pos) {
  cnt[ara[pos]]++;
  if (cnt[ara[pos]] == 1)
    value++;
}
void remove(int pos) {
  cnt[ara[pos]]--;
  if (cnt[ara[pos]] == 0)
    value--;
}

int main() {
#ifdef VAMP
  clock_t tStart = clock();
  freopen("input.txt", "r", stdin);
  freopen("output.txt", "w", stdout);
#endif
  FastRead int n;
  int q;
  cin >> n >> q;
  sq = sqrt(n * 2);
  for (int i = 0; i < n; i++)
    cin >> ara[i];

  for (int i = 0; i < q; i++) {
    int l, r;
    cin >> l >> r;
    Q[i].l = l - 1;
    Q[i].r = r - 1;
    Q[i].id = i;
  }
  sort(Q, Q + q, cmp);

  int mol = 0;
  int mor = -1;
  for (int i = 0; i < q; i++) {
    int l = Q[i].l;
    int r = Q[i].r;

    while (mor < r) {
      mor++;
      add(mor);
    }
    while (mor > r) {
      remove(mor);
      mor--;
    }
    while (mol < l) {
      remove(mol);
      mol++;
    }

    while (mol > l) {
      mol--;
      add(mol);
    }

    answer[Q[i].id] = value;
  }

  for (int i = 0; i < q; i++) {
    cout << answer[i] << "\\n";
  }

#ifdef VAMP
  fprintf(stderr, "\\n>> Runtime: %.10fs\\n",
          (double)(clock() - tStart) / CLOCKS_PER_SEC);
#endif
}


Error: TLE

Fixed submission:

#include <bits/stdc++.h>

using namespace std;

#define fRead(x) freopen(x, "r", stdin)
#define fWrite(x) freopen(x, "w", stdout)

#define LL long long
#define ULL unsigned long long
#define ff first
#define ss second
#define pb push_back
#define PI acos(-1.0)
#define mk make_pair
#define pii pair<int, int>
#define pll pair<LL, LL>

#define min3(a, b, c) min(a, min(b, c))
#define max3(a, b, c) max(a, max(b, c))
#define min4(a, b, c, d) min(a, min(b, min(c, d)))
#define max4(a, b, c, d) max(a, max(b, max(c, d)))
#define SQR(a) ((a) * (a))
#define FOR(i, a, b) for (int i = a; i <= b; i++)
#define ROF(i, a, b) for (int i = a; i >= b; i--)
#define REP(i, b) for (int i = 0; i < b; i++)
#define MEM(a, x) memset(a, x, sizeof(a))
#define ABS(x) ((x) < 0 ? -(x) : (x))

#define SORT(v) sort(v.begin(), v.end())
#define REV(v) reverse(v.begin(), v.end())
// #pragma GCC target ("avx2")
// #pragma GCC optimization ("O3")
// #pragma GCC optimization ("unroll-loops")
// #pragma comment(linker, "/stack:200000000")
// #pragma GCC optimize("Ofast")
// #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#define FastRead                                                               \\
  ios_base::sync_with_stdio(0);                                                \\
  cin.tie(nullptr);
#ifdef VAMP
#define debug(...) __f(#__VA_ARGS__, __VA_ARGS__)
template <typename Arg1> void __f(const char *name, Arg1 &&arg1) {
  cout << name << " = " << arg1 << std::endl;
}
template <typename Arg1, typename... Args>
void __f(const char *names, Arg1 &&arg1, Args &&...args) {
  const char *comma = strchr(names + 1, ',');
  cout.write(names, comma - names) << " = " << arg1 << " | ";
  __f(comma + 1, args...);
}
#else
#define debug(...)
#endif

const int N = 500005;
int ara[N + 5];
int cnt[N + 5];
struct Data {
  int l, r, id;
};
Data Q[N + 5];
int answer[N + 5];
int sq;
bool cmp(Data A, Data B) {
  if (A.l / sq != B.l / sq)
    return A.l / sq < B.l / sq;
  return A.r < B.r;
}
int value;
void add(int pos) {
  cnt[ara[pos]]++;
  if (cnt[ara[pos]] == 1)
    value++;
}
void remove(int pos) {
  cnt[ara[pos]]--;
  if (cnt[ara[pos]] == 0)
    value--;
}

int main() {
#ifdef VAMP
  clock_t tStart = clock();
  freopen("input.txt", "r", stdin);
  freopen("output.txt", "w", stdout);
#endif
  FastRead int n;
  int q;
  cin >> n >> q;
  sq = sqrt(n);
  for (int i = 0; i < n; i++)
    cin >> ara[i];

  for (int i = 0; i < q; i++) {
    int l, r;
    cin >> l >> r;
    Q[i].l = l - 1;
    Q[i].r = r - 1;
    Q[i].id = i;
  }
  sort(Q, Q + q, cmp);

  int mol = 0;
  int mor = -1;
  for (int i = 0; i < q; i++) {
    int l = Q[i].l;
    int r = Q[i].r;

    while (mor < r) {
      mor++;
      add(mor);
    }
    while (mor > r) {
      remove(mor);
      mor--;
    }
    while (mol < l) {
      remove(mol);
      mol++;
    }

    while (mol > l) {
      mol--;
      add(mol);
    }

    answer[Q[i].id] = value;
  }

  for (int i = 0; i < q; i++) {
    printf("%d\\n", answer[i]);
  }

#ifdef VAMP
  fprintf(stderr, "\\n>> Runtime: %.10fs\\n",
          (double)(clock() - tStart) / CLOCKS_PER_SEC);
#endif
}