Submission #533615

#TimeUsernameProblemLanguageResultExecution timeMemory
533615codr0Financial Report (JOI21_financial)C++14
100 / 100
409 ms25024 KiB
// Code by Parsa Eslami #include <bits/stdc++.h> #define pii pair<int,int> #define bit(i,j) ((j>>i)&1) #define FOR(i,a,b) for(int i=a;i<=b;i++) #define FORR(i,a,b) for(int i=a;i>=b;i--) #define S second #define F first #define pb push_back #define SZ(x) (int)x.size() #define all(x) x.begin(),x.end() #define err(x) cout<<#x<<": "<<x<<'\n'; using namespace std; const int N=3e5+4; int seg[4*N]; bool lazy[4*N]; void shift(int id){ if(!lazy[id]) return; lazy[2*id]=lazy[2*id+1]=1; lazy[id]=0; seg[id]=0; seg[2*id]=0; seg[2*id+1]=0; } int get(int id,int l,int r,int st,int en){ if(en==st) return 0; if(st>=r||en<=l) return 0; if(st<=l&&en>=r) return seg[id]; shift(id); int mid=(r+l)/2; return max(get(2*id,l,mid,st,en),get(2*id+1,mid,r,st,en)); } void upd(int id,int l,int r,int ind,int X){ if(ind<l||ind>=r) return; if(l+1==r){ seg[id]=max(seg[id],X); return; } shift(id); int mid=(r+l)/2; upd(2*id,l,mid,ind,X); upd(2*id+1,mid,r,ind,X); seg[id]=max(seg[2*id],seg[2*id+1]); } void upd0(int id,int l,int r,int st,int en){ if(st>=r||en<=l) return; if(st<=l&&en>=r){ seg[id]=0; lazy[id]=1; return; } shift(id); int mid=(r+l)/2; upd0(2*id,l,mid,st,en); upd0(2*id+1,mid,r,st,en); seg[id]=max(seg[2*id],seg[2*id+1]); } int32_t main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n,D; cin>>n>>D; vector<pii> vc; int a[n+1]; FOR(i,1,n){ int x0; cin>>x0; vc.pb({x0,i}); } sort(all(vc)); int pr=0; FOR(i,0,SZ(vc)-1){ if(i==0||vc[i].F!=vc[i-1].F) pr++; a[vc[i].S]=pr; } set<pii> st; FOR(i,1,n){ int X=get(1,1,n+1,1,a[i]); upd(1,1,n+1,a[i],X+1); if(i==n){ int Y=get(1,1,n+1,a[i],n+1); cout<<max(Y,X+1)<<'\n'; return 0; } st.insert({a[i],i}); if(SZ(st)>D){ st.erase({a[i-D],i-D}); int mn=(*st.begin()).F; upd0(1,1,n+1,1,mn-1); } } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...