Submission #1182892

#TimeUsernameProblemLanguageResultExecution timeMemory
1182892AlgorithmWarriorFinancial Report (JOI21_financial)C++20
100 / 100
353 ms10392 KiB
#include <bits/stdc++.h> using namespace std; int const MAX=300005; int n,d; struct AINT{ int v[4*MAX]; void update(int nod,int st,int dr,int poz,int val){ if(st==dr) v[nod]=val; else{ int mij=(st+dr)/2; if(poz<=mij) update(2*nod,st,mij,poz,val); else update(2*nod+1,mij+1,dr,poz,val); v[nod]=max(v[2*nod],v[2*nod+1]); } } int query(int nod,int st,int dr,int a,int b){ if(a<=st && dr<=b) return v[nod]; int rasp=0; int mij=(st+dr)/2; if(a<=mij) rasp=max(rasp,query(2*nod,st,mij,a,b)); if(b>mij) rasp=max(rasp,query(2*nod+1,mij+1,dr,a,b)); return rasp; } }aint; map<int,int>intv; void add_pos(int pos){ auto it=intv.upper_bound(pos); if(it!=intv.begin()){ it=prev(it); if(pos<=it->second) return; } intv[pos]=pos; it=intv.lower_bound(pos); if(it!=intv.begin()){ it=prev(it); if(pos-it->second<=d){ it->second=pos; it=next(it); intv.erase(it); } } it=intv.upper_bound(pos); if(it!=intv.end()){ if(it->first-pos<=d){ int capat=it->second; it=prev(it); it->second=capat; it=next(it); intv.erase(it); } } } struct valpoz{ int val,poz; bool operator<(valpoz ot){ if(val!=ot.val) return val<ot.val; return poz>ot.poz; } }v[MAX]; void read(){ cin>>n>>d; int i; for(i=1;i<=n;++i){ cin>>v[i].val; v[i].poz=i; } sort(v+1,v+n+1); } int final_ans; void solve(){ int i; for(i=1;i<=n;++i){ add_pos(v[i].poz); auto it=intv.upper_bound(v[i].poz); it=prev(it); int ans=aint.query(1,1,n,it->first,v[i].poz)+1; if(it->second==n && final_ans<ans) final_ans=ans; aint.update(1,1,n,v[i].poz,ans); } } int main() { read(); solve(); cout<<final_ans; 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...