Submission #989630

#TimeUsernameProblemLanguageResultExecution timeMemory
989630m5588ohammedPoklon (COCI17_poklon)C++14
140 / 140
4802 ms20820 KiB
#include <bits/stdc++.h> #pragma GCC optimize("O3,Ofast,unroll-loops") #pragma GCC target("avx2,sse3,sse4,avx") using namespace std; #define int long long int MAXN=500001; int s=sqrt(MAXN); struct query{ int l,r,o; }; int ans; unordered_map <int,int> mp; bool comp(query a,query b){ if(a.l/s==b.l/s){ return a.r<b.r; } return a.l/s < b.l/s; } void add(int i){ if(mp[i]==2) ans--; else if(mp[i]==1) ans++; mp[i]++; } void move(int i){ if(mp[i]==2) ans--; else if(mp[i]==3) ans++; mp[i]--; } signed main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n,q; cin>>n>>q; int arr[n]; query Q[q]; for(int i=0;i<n;i++) cin>>arr[i]; for(int i=0;i<q;i++){ int L,R; cin>>L>>R; Q[i]={L-1,R-1,i}; } sort(Q,Q+q,comp); int L=0,R=-1; int answer[q]; for(int i=0;i<q;i++){ int L1=Q[i].l,R1=Q[i].r; while(L<L1){ move(arr[L]); L++; } while(L>L1){ L--; add(arr[L]); } while(R<R1){ R++; add(arr[R]); } while(R>R1){ move(arr[R]); R--; } answer[Q[i].o]=ans; } for(int i=0;i<q;i++) cout<<answer[i]<<"\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...