# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
479650 | 2021-10-12T16:32:49 Z | aris12345678 | Poklon (COCI17_poklon) | C++14 | 5000 ms | 10020 KB |
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; #define X first #define Y second const int mxN = 500005; const int block = 800; int cnt = 0; int a[mxN]; map<int, int> mp; struct Q { int X, Y, pos; }; bool comp(Q a, Q b) { if(a.X/block != b.X/block) return a.X/block < b.X/block; return a.Y < b.Y; } void add(int p) { if(mp[a[p]] == 2) cnt--; mp[a[p]]++; if(mp[a[p]] == 2) cnt++; } void remove(int p) { if(mp[a[p]] == 2) cnt--; mp[a[p]]--; if(mp[a[p]] == 2) cnt++; } int main() { int n, q; scanf("%d %d", &n, &q); for(int i = 1; i <= n; i++) scanf("%d", &a[i]); vector<Q> queries; for(int i = 0; i < q; i++) { int l, r; scanf("%d %d", &l, &r); queries.push_back({l, r, i}); } sort(queries.begin(), queries.end(), comp); vector<int> ans(q); int ml = 1, mr = 0; for(int i = 0; i < q; i++) { int l = queries[i].X, r = queries[i].Y; while(ml > l) { ml--; add(ml); } while(mr < r) { mr++; add(mr); } while(ml < l) { remove(ml); ml++; } while(mr > r) { remove(mr); mr--; } ans[queries[i].pos] = cnt; } for(int i = 0; i < q; i++) printf("%d\n", ans[i]); return 0; }
Compilation message
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 204 KB | Output is correct |
2 | Correct | 4 ms | 204 KB | Output is correct |
3 | Correct | 18 ms | 324 KB | Output is correct |
4 | Correct | 84 ms | 460 KB | Output is correct |
5 | Correct | 2560 ms | 2484 KB | Output is correct |
6 | Correct | 3374 ms | 2380 KB | Output is correct |
7 | Execution timed out | 5076 ms | 4280 KB | Time limit exceeded |
8 | Execution timed out | 5086 ms | 7736 KB | Time limit exceeded |
9 | Execution timed out | 5081 ms | 8144 KB | Time limit exceeded |
10 | Execution timed out | 5094 ms | 10020 KB | Time limit exceeded |