Submission #989627

# Submission time Handle Problem Language Result Execution time Memory
989627 2024-05-28T12:43:38 Z m5588ohammed Poklon (COCI17_poklon) C++14
84 / 140
5000 ms 28244 KB
 #include <bits/stdc++.h>
using namespace std;
#define int long long
int MAXN=200001;
int s=sqrt(MAXN);
 
struct query{
    int l,r,o;
};
int ans;
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()
{
    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]<<endl;
 
    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 348 KB Output is correct
2 Correct 3 ms 348 KB Output is correct
3 Correct 6 ms 348 KB Output is correct
4 Correct 28 ms 692 KB Output is correct
5 Correct 1418 ms 5964 KB Output is correct
6 Correct 1726 ms 5992 KB Output is correct
7 Execution timed out 5040 ms 11384 KB Time limit exceeded
8 Execution timed out 5058 ms 17204 KB Time limit exceeded
9 Execution timed out 5027 ms 22644 KB Time limit exceeded
10 Execution timed out 5058 ms 28244 KB Time limit exceeded