Submission #891701

#TimeUsernameProblemLanguageResultExecution timeMemory
891701ind1vPoklon (COCI17_poklon)C++11
140 / 140
296 ms57796 KiB
#include <bits/stdc++.h> using namespace std; const int N = 5e5 + 5; struct fenwick_tree { int f[N]; fenwick_tree() { memset(f, 0, sizeof(f)); } void upd(int i, int x) { for (; i < N; i += i & -i) { f[i] += x; } } int get(int i) { int res = 0; for (; i >= 1; i -= i & -i) { res += f[i]; } return res; } int get(int l, int r) { return get(r) - get(l - 1); } }; int n, q; int a[N]; int ans[N]; vector<int> v; pair<int, int> p[N]; vector<pair<int, int>> que[N]; fenwick_tree ft; vector<int> idx[N]; int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> n >> q; for (int i = 1; i <= n; i++) { cin >> a[i]; } copy(a + 1, a + n + 1, back_inserter(v)); sort(v.begin(), v.end()); v.erase(unique(v.begin(), v.end()), v.end()); for (int i = 1; i <= n; i++) { a[i] = lower_bound(v.begin(), v.end(), a[i]) - v.begin(); } for (int i = 0; i < N; i++) { p[i] = {-1, -1}; } for (int i = 1; i <= q; i++) { int l, r; cin >> l >> r; que[r].emplace_back(l, i); } for (int i = 1; i <= n; i++) { if (idx[a[i]].size() >= 2) { ft.upd(idx[a[i]][idx[a[i]].size() - 2], -1); } if (idx[a[i]].size() >= 3) { ft.upd(idx[a[i]][idx[a[i]].size() - 3], +1); } idx[a[i]].emplace_back(i); if (idx[a[i]].size() >= 2) { ft.upd(idx[a[i]][idx[a[i]].size() - 2], +1); } if (idx[a[i]].size() >= 3) { ft.upd(idx[a[i]][idx[a[i]].size() - 3], -1); } for (auto x : que[i]) { ans[x.second] = ft.get(x.first, i); } } for (int i = 1; i <= q; i++) { cout << ans[i] << '\n'; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...