# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
479651 | 2021-10-12T16:33:51 Z | aris12345678 | Poklon (COCI17_poklon) | C++14 | 5000 ms | 10188 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]; unordered_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
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 204 KB | Output is correct |
2 | Correct | 2 ms | 204 KB | Output is correct |
3 | Correct | 6 ms | 204 KB | Output is correct |
4 | Correct | 33 ms | 460 KB | Output is correct |
5 | Correct | 941 ms | 2452 KB | Output is correct |
6 | Correct | 941 ms | 2412 KB | Output is correct |
7 | Correct | 2503 ms | 4604 KB | Output is correct |
8 | Correct | 4900 ms | 7728 KB | Output is correct |
9 | Execution timed out | 5044 ms | 8092 KB | Time limit exceeded |
10 | Execution timed out | 5025 ms | 10188 KB | Time limit exceeded |