Submission #1280272

#TimeUsernameProblemLanguageResultExecution timeMemory
1280272Newtonabc Martian DNA (BOI18_dna)C++20
100 / 100
24 ms3256 KiB
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int ck[N],r=0,req[N],cnt[N],arr[N];
//O(n log n) able but solved in O(n) :>
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int n,k,r;
    cin>>n >>k >>r;
    for(int i=1;i<=n;i++){
        cin>>arr[i];
    }
    for(int i=0;i<r;i++){
        int a,b;
        cin>>a >>b;
        req[a]=b;
    }
    for(int i=1;i<=n;i++){
        ck[arr[i]]++;
        if(ck[arr[i]]-1<req[arr[i]] && ck[arr[i]]>=req[arr[i]]) r=i;
    }
    for(int i=0;i<k;i++){
        if(ck[i]<req[i]){
            cout<<"impossible";
            return 0;
        }
    }
    int ans=r;
    for(int i=1;i<=r;i++) cnt[arr[i]]++;
    for(int i=2;i<=n;i++){
        cnt[arr[i-1]]--;
        while(cnt[arr[i-1]]<req[arr[i-1]] && r+1<n) r++,cnt[arr[r]]++;
        if(cnt[arr[i-1]]<req[arr[i-1]]) break;
        ans=min(ans,r-i+1);
    }
    cout<<ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...