# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
40912 | 2018-02-09T23:05:01 Z | Hassoony | Poklon (COCI17_poklon) | C++14 | 5000 ms | 10616 KB |
#include<bits/stdc++.h> #include<unordered_map> using namespace std; typedef long long ll; typedef double D; const ll inf=(1ll<<61); const int mod=1e9+7; const int MX=1e6+9; const int SQ=150; int n,q,ans,res[MX],a[MX]; pair<int,pair<int,int> >Q[MX]; unordered_map<int,int>cnt; bool cmp(pair<int,pair<int,int> >A,pair<int,pair<int,int> >B){ if((A.first/SQ)==(B.first/SQ)){ return A.second.first<B.second.first; } return (A.first/SQ)<(B.first/SQ); } void add(int x){ ans-=(cnt[x]==2); cnt[x]++; ans+=(cnt[x]==2); } void rem(int x){ ans-=(cnt[x]==2); cnt[x]--; ans+=(cnt[x]==2); } int main(){ cin>>n>>q; for(int i=1;i<=n;i++){ scanf("%d",&a[i]); } for(int i=0;i<q;i++){ scanf("%d%d",&Q[i].first,&Q[i].second.first); Q[i].second.second=i; } sort(Q,Q+q,cmp); int mol=1,mor=0; for(int i=0;i<q;i++){ int L=Q[i].first,R=Q[i].second.first; while(mor<R){ add(a[++mor]); } while(mor>R){ rem(a[mor--]); } while(mol<L){ rem(a[mol++]); } while(mol>L){ add(a[--mol]); } // cout<<L<<" "<<R<<" "<<Q[i].second.second<<endl; res[Q[i].second.second]=ans; } for(int i=0;i<q;i++)printf("%d\n",res[i]); }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 2 ms | 248 KB | Output is correct |
2 | Correct | 3 ms | 352 KB | Output is correct |
3 | Correct | 5 ms | 404 KB | Output is correct |
4 | Correct | 28 ms | 536 KB | Output is correct |
5 | Correct | 3330 ms | 2560 KB | Output is correct |
6 | Correct | 3310 ms | 2640 KB | Output is correct |
7 | Execution timed out | 5057 ms | 4556 KB | Time limit exceeded |
8 | Execution timed out | 5082 ms | 6528 KB | Time limit exceeded |
9 | Execution timed out | 5059 ms | 8568 KB | Time limit exceeded |
10 | Execution timed out | 5042 ms | 10616 KB | Time limit exceeded |