Submission #1342895

#TimeUsernameProblemLanguageResultExecution timeMemory
1342895killerzaluu Martian DNA (BOI18_dna)C++20
0 / 100
2094 ms9800 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;
  
  for(i=1; i<=m; i++) {
    long long c, d; cin>>c>>d;
    bad[c]=d;
    bad[-1]++;
  }
  
  for(i=1; i<=n; i++) sad[i]=INF;
  
  long long l=1;
  long long r=INF;
  for(i=1; i<=n; i++) {
     bad[a[i]]--;
     
     if(bad[a[i]]==0) {
       bad[-1]--;
       
       if(bad[-1]==0) {
         r=i;
         break;
       }
     }
  }
  
  sad[1]=r-l+1;
  
  for(i=2; i<=n; i++) {
    l=i;
    bad[a[i-1]]++;
    
    if(bad[a[i-1]]==1) {
      bad[-1]++;
    }
    
    if(bad[-1]==0) {
      sad[i]=r-l+1;
      continue;
    }
    
    for(j=r+1; j<=n; j++) {
      bad[a[j]]--;
     
     if(bad[a[j]]==0) {
       bad[-1]--;
       
       if(bad[-1]==0) {
         r=j;
         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...