Submission #1342912

#TimeUsernameProblemLanguageResultExecution timeMemory
1342912killerzaluu Martian DNA (BOI18_dna)C++20
0 / 100
299 ms14756 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 l=1;
  long long r=0;
  
  for(i=1; i<=n; i++) {
      l=i;
      if(i>1) {
        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++) {
      bad[a[j]]--;
     
     if(bad[a[j]]==0 && dad[a[j]]==1) {
       bad[-1]--;
       
       if(bad[-1]==0) {
         r=j;
         break;
       }
     }
     r=j;
    }
    
    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...