Submission #1211889

#TimeUsernameProblemLanguageResultExecution timeMemory
1211889NHristovIndex (COCI21_index)C++20
110 / 110
130 ms6160 KiB
#include <bits/stdc++.h> #define endl '\n' using namespace std; const int BLOCK = 100; const int N = 2e5 + 5; const int Q = 2e5 + 5; struct Query { int l, r, id; bool operator < (const Query &other) { if (l / BLOCK == other.l / BLOCK) { if ((l / BLOCK) & 1) { return r < other.r; } return r > other.r; } return l < other.l; } }; int n, t; int p[N]; Query queries[Q]; int ans[Q]; int times[N]; int all; int curr; void add(int x) { times[x]++; if (x >= curr) { all++; } if (all - times[curr] > curr) { all -= times[curr]; curr++; } } void rem(int x) { times[x]--; if (x >= curr) { all--; } if (all < curr) { curr--; all += times[curr]; } } int main() { ios::sync_with_stdio(0); cin.tie(0); cin >> n >> t; for (int i = 1; i <= n; i++) { cin >> p[i]; } for (int i = 1; i <= t; i++) { cin >> queries[i].l >> queries[i].r; queries[i].id = i; } sort(queries + 1, queries + t + 1); int l = 1, r = 0; for (int i = 1; i <= t; i++) { while (r < queries[i].r) { r++; add(p[r]); } while (l > queries[i].l) { l--; add(p[l]); } while (r > queries[i].r) { rem(p[r]); r--; } while (l < queries[i].l) { rem(p[l]); l++; } ans[queries[i].id] = curr; } for (int i = 1; i <= t; i++) { cout << ans[i] << endl; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...