Submission #1342946

#TimeUsernameProblemLanguageResultExecution timeMemory
1342946killerzaluu Martian DNA (BOI18_dna)C++20
0 / 100
475 ms16064 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;

    if(dad[c]==0) bad[-1]++;
    bad[c]+=d;
    dad[c]=1;
  }

  for(i=1; i<=n; i++) sad[i]=INF;

  long long l, r=0;

  for(i=1; i<=n; i++) {
    l=i;

    if(i>=2) {
      bad[a[i-1]]++;
      if(dad[a[i-1]]==1 && bad[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(dad[a[j]]==1 && bad[a[j]]==0) {
        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\n";
  else cout<<ans<<"\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...