제출 #1342948

#제출 시각아이디문제언어결과실행 시간메모리
1342948killerzaluu Martian DNA (BOI18_dna)C++20
100 / 100
361 ms21124 KiB
#include <bits/stdc++.h> 
using namespace std;
const long long INF=200000000;
int main() {
  
  long long n, k, m, i, j; cin>>n>>k>>m;
  long long a[n+1], sad[n+1];
  
  for(i=1; i<=n; i++) cin>>a[i];
  map<long long, long long> bad, dad;
  
  for(i=1; i<=m; i++) {
    long long c, d; cin>>c>>d;
    bad[c]=d;
    dad[c]=1;
    bad[-1]++;
  }
  
  for(i=1; i<=n; i++) sad[i]=INF;

  long long r, l;
  r=0;
  
  for(i=1; i<=n; i++) {
    l=i;
    if(i>=2) {
      bad[a[i-1]]++;
      if(bad[a[i-1]]==1 && dad[a[i-1]]==1) {
        bad[-1]++;
      }
    }
    
    if(bad[-1]==0) {
      sad[i]=r-l+1;
      continue;
    }
    
    for(j=r+1; j<=n; j++) {
      r=j;
      bad[a[j]]--;
     
     if(bad[a[j]]==0 && dad[a[j]]==1) {
       bad[-1]--;
       if(bad[-1]==0) {
         sad[i]=r-l+1;
         break;
       }
     }
    }
    if(bad[-1]==0) sad[i]=r-l+1;
  }
  
  long long ans=INF;
  
  for(i=1; i<=n; i++) {
    ans=min(ans, sad[i]);
  }
  if(ans>n) {
    cout<<"impossible"<<endl;
  }
  else {
    cout<<ans<<endl;
  }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...