Submission #1156645

#TimeUsernameProblemLanguageResultExecution timeMemory
1156645the_ZHER Martian DNA (BOI18_dna)C++20
100 / 100
26 ms6332 KiB
#include <bits/stdc++.h>
#define boost ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define int long long
using namespace std;
const int inf=1e17;
const int N=2e5+5;
const int N1=1e5+5;
const int N2=5e6+6;
const int mod=1e9+7;
const int k1=447;
struct edge{
    int d,in;
};
struct edge1{
    int l,r;
};
vector<int>v;
int dp[N];
int dp1[N];
vector<int>v1;
int dp2[N];
signed main(){
boost;
    int n,k,q;
    cin>>n>>k>>q;
    v.push_back(0);
    for(int i=1;i<=n;i++){
        int x;
        cin>>x;
        dp[x]++;
        v.push_back(x);
    }
    int ok2=0;
    int cnt1=0;
    for(int i=1;i<=q;i++){
        int x,cnt;
        cin>>x>>cnt;
        dp1[x]=cnt;
        dp2[x]=1;
        cnt1++;
        if(dp[x]<cnt){
            ok2=1;
        }
    }
    if(ok2==1){
        cout<<"impossible";
        return 0;
    }
    for(int i=1;i<=n;i++){
        dp[v[i]]=0;
    }
    int l=1;
    int ans=n;
    for(int r=1;r<=n;r++){
        dp[v[r]]++;
        if(dp[v[r]]>=dp1[v[r]]&&dp1[v[r]]!=0&&dp2[v[r]]==1){
            cnt1--;
            dp2[v[r]]=0;
        }
        int ok3=0;
        if(cnt1==0){
            ok3=1;
        }
        while(cnt1==0&&l<=r){
            dp[v[l]]--;
            if(dp[v[l]]<dp1[v[l]]&&dp1[v[l]]!=0){
                cnt1++;
                dp2[v[l]]=1;
            }
            l++;
        }
        if(ok3==1){
            ans=min(ans,r-(l-1)+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...