Submission #1108715

#TimeUsernameProblemLanguageResultExecution timeMemory
1108715_rain_ Martian DNA (BOI18_dna)C++14
100 / 100
88 ms7316 KiB
#include<bits/stdc++.h> using namespace std; typedef long long ll; #define name "main" const int N=200'000; int n,k,R; int d[N+2],q[N+2]; int st[N*4+2]; #define lef(id) id<<1 #define rig(id) id<<1|1 void build(int id,int l,int r){ if (l==r) st[id]=q[l]; else{ int m=l+r>>1; build(lef(id),l,m); build(rig(id),m+1,r); st[id]=max(st[lef(id)],st[rig(id)]); } } void upd(int id,int l,int r,int p,int x){ if (l>p||r<p) return; if (l==r){ st[id]+=x; } else{ int m=l+r>>1; upd(lef(id),l,m,p,x); upd(rig(id),m+1,r,p,x); st[id]=max(st[lef(id)],st[rig(id)]); } } int32_t main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n>>k>>R; for(int i=1;i<=n;++i) cin>>d[i],++d[i]; for(int i=1;i<=R;++i) { int t;cin>>t;++t;cin>>q[t]; } build(1,1,k); int ans=n+1; for(int i=1,j=1;i<=n;++i){ while(j<=n&&st[1]>0){ upd(1,1,k,d[j],-1); ++j; } if (st[1]==0) ans=min(ans,j-i); upd(1,1,k,d[i],1); } if (ans==n+1){ cout<<"impossible"; exit(0); } cout<<ans; exit(0); }

Compilation message (stderr)

dna.cpp: In function 'void build(int, int, int)':
dna.cpp:17:10: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   17 |   int m=l+r>>1;
      |         ~^~
dna.cpp: In function 'void upd(int, int, int, int, int)':
dna.cpp:29:10: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   29 |   int m=l+r>>1;
      |         ~^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...