제출 #1367052

#제출 시각아이디문제언어결과실행 시간메모리
1367052lizi14 Martian DNA (BOI18_dna)C++20
100 / 100
299 ms14496 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define f first
#define ss second
#define ina insert
#define pb push_back
signed main(){
    int n,m,t;
    cin>>n>>m>>t;
    int x[n];
    for(int i=0; i<n; i++){
        cin>>x[i];
    }
    map<int,pair<int,int>>mp;
    // romeli  ramd wirdeba ramdeni gvaqvs//
    for(int i=0; i<t; i++){
        int a,b;
        cin>>a>>b;
        mp[a]={b,0};
    }
    for(int i=0; i<m; i++){
        if(mp[i].f<1e18){
            continue;
        }
        mp[i]={1e18,0};
    }
    int vak=0;
    int k=-1;
    int ans=1e18;
    for(int i=0; i<n; i++){
        if(i>0){
            mp[x[i-1]].ss--;
            if(mp[x[i-1]].ss<mp[x[i-1]].f && mp[x[i-1]].ss+1>=mp[x[i-1]].f)vak--;
        }
        if(vak==t && k<n){
            //cout<<i<<" "<<k-i+1<<endl;
            ans=min(ans,k-i+1);
            continue;
        }
        while(k<n){
            k++;
            mp[x[k]].ss++;
            if(mp[x[k]].ss==mp[x[k]].f)vak++;
            //if(i==2)cout<<vak<<" "<<mp[x[k]].f<<" "<<mp[x[k]].ss<<endl;
            if(vak==t){
                break;
            }
            // else{
            //     k++;
            // }
        }
        //cout<<i<<" "<<k<<" "<<vak<<endl;
        if(k==n)continue;
        ans=min(ans,k-i+1);
    }
    if(ans==1e18){
        cout<<"impossible"<<endl;
    }
    else cout<<ans<<endl;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…