Submission #260514

#TimeUsernameProblemLanguageResultExecution timeMemory
260514sckmdPoklon (COCI17_poklon)C++14
0 / 140
2017 ms12960 KiB
#include <bits/stdc++.h> using namespace std; #define MAXN 500005 int a[MAXN]; map <int,int> mp; int hsh = 0; int ans[MAXN]; struct que { int l,r,id; }; que queries[MAXN]; int BLOCK; int cnt[MAXN]; bool cmp(que qa,que qb) { if(qa.l/BLOCK != qb.l/BLOCK)return qa.l < qb.l; return qa.r < qb.r; } int res = 0; void chk1(int br) { //++ if(cnt[br]==2)res++; if(cnt[br]==3)res--; } void chk2(int br) { //-- if(cnt[br]==2)res++; if(cnt[br]==1)res--; } int main() { ios_base::sync_with_stdio(false); int n,q; cin >> n >> q; BLOCK = sqrt(n); for(int i = 1; i <= n; i++) { cin >> a[i]; if(!mp[a[i]])mp[a[i]]=++hsh; a[i]=mp[a[i]]; } for(int i = 0; i < q; i++)cin >> queries[i].l >> queries[i].r,queries[i].id=i; sort(queries,queries+q,cmp); int L = 1; int R = n; for(int i = 1; i <= n; i++)cnt[a[i]]++; for(int i = 1; i <= n; i++)if(cnt[i]==2)res++; for(int i = 0; i < q; i++) { int l = queries[i].l; int r = queries[i].r; int idx = queries[i].id; while(L < l)cnt[a[L]]--,L++,chk2(a[L]); while(L > l)L--,cnt[a[L]]++,chk1(a[L]); while(R > r)cnt[a[R]]--,R--,chk2(a[R]); while(R < r)R++,cnt[a[R]]++,chk1(a[R]); ans[idx]=res; } for(int i = 0; i < q; i++)cout << ans[i] << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...