Submission #1156633

#TimeUsernameProblemLanguageResultExecution timeMemory
1156633the_ZHER Martian DNA (BOI18_dna)C++20
68 / 100
55 ms27836 KiB
#include <bits/stdc++.h> #define boost ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define int long long using namespace std; const int inf=1e17; const int N=2e5+5; const int N1=1e5+5; const int N2=5e6+6; const int mod=1e9+7; const int k1=447; struct edge{ int d,in; }; struct edge1{ int l,r; }; vector<int>v; int dp[N]; int dp1[N]; int dp2[13][N]; vector<int>v1; int ok(int l,int r){ int ok1=0; for(int i=0;i<v1.size();i++){ int cnt=dp2[i][r]-dp2[i][l-1]; if(cnt<dp1[v1[i]]){ ok1=1; break; } } return ok1; } signed main(){ boost; int n,k,q; cin>>n>>k>>q; v.push_back(0); for(int i=1;i<=n;i++){ int x; cin>>x; dp[x]++; v.push_back(x); } int ok2=0; for(int i=1;i<=q;i++){ int x,cnt; cin>>x>>cnt; v1.push_back(x); dp1[x]=max(dp1[x],cnt); if(dp[x]<cnt){ ok2=1; } } if(ok2==1){ cout<<"impossible"; return 0; } for(int i=1;i<=n;i++){ dp[v[i]]=0; } for(int i=0;i<v1.size();i++){ for(int j=1;j<=n;j++){ if(v[j]==v1[i]){ dp2[i][j]=1; } dp2[i][j]+=dp2[i][j-1]; } } int ans=n; for(int i=1;i<=n;i++){ int l=i,r=n; while(l+1<r){ int mid=(l+r)/2; if(ok(i,mid)==0){ r=mid; }else{ l=mid; } } if(ok(i,l)==0){ r=l; } if(ok(i,r)==1){ continue; } ans=min(ans,r-i+1); } cout<<ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...