# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
610869 | 2022-07-28T16:50:16 Z | racsosabe | Poklon (COCI17_poklon) | C++14 | 1179 ms | 20604 KB |
#include<bits/stdc++.h> using namespace::std; const int N = 500000 + 5; const int bsize = 710; int n; int q; int a[N]; int id[N]; int ans[N]; int cnt[N]; int L[N], R[N]; void compress(){ set<int> S; for(int i = 1; i <= n; i++) S.emplace(a[i]); int len = 0; map<int, int> id; for(int x : S){ id[x] = len++; } for(int i = 1; i <= n; i++) a[i] = id[a[i]]; } void solve(){ vector<int> queries(q); iota(queries.begin(), queries.end(), 1); sort(queries.begin(), queries.end(), [&] (int i, int j){ if(id[i] == id[j]) return id[i] & 1 ? R[i] < R[j] : R[i] > R[j]; return id[i] < id[j]; }); int cur = 0; int l = 1, r = 1; for(int at : queries){ while(r <= R[at]){ cnt[a[r]]++; if(cnt[a[r]] == 2) cur++; else if(cnt[a[r]] == 3) cur--; r += 1; } while(L[at] < l){ l--; cnt[a[l]]++; if(cnt[a[l]] == 2) cur++; else if(cnt[a[l]] == 3) cur--; } while(l < L[at]){ cnt[a[l]]--; if(cnt[a[l]] == 1) cur--; else if(cnt[a[l]] == 2) cur++; l++; } while(R[at] + 1 < r){ r--; cnt[a[r]]--; if(cnt[a[r]] == 1) cur--; else if(cnt[a[r]] == 2) cur++; } ans[at] = cur; } } int main(){ scanf("%d %d", &n, &q); for(int i = 1; i <= n; i++) scanf("%d", a + i); compress(); for(int i = 1; i <= q; i++){ scanf("%d %d", L + i, R + i); id[i] = L[i] / bsize; } solve(); for(int i = 1; i <= q; i++) printf("%d\n", ans[i]); return 0; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 340 KB | Output is correct |
2 | Correct | 1 ms | 340 KB | Output is correct |
3 | Correct | 2 ms | 324 KB | Output is correct |
4 | Correct | 6 ms | 452 KB | Output is correct |
5 | Correct | 139 ms | 4032 KB | Output is correct |
6 | Correct | 143 ms | 4120 KB | Output is correct |
7 | Correct | 354 ms | 8276 KB | Output is correct |
8 | Correct | 592 ms | 12472 KB | Output is correct |
9 | Correct | 839 ms | 16464 KB | Output is correct |
10 | Correct | 1179 ms | 20604 KB | Output is correct |