제출 #466540

#제출 시각아이디문제언어결과실행 시간메모리
466540stefantagaFinancial Report (JOI21_financial)C++14
5 / 100
732 ms42648 KiB
#include <bits/stdc++.h> using namespace std; int n,d,v[300005]; map <int,int> m; int arb[1200005]; priority_queue <pair <int,int> > h[300005]; int nr; int max1(int a,int b) { if (a>b) { return a; } return b; } void update (int st,int dr,int nod,int poz,int val) { if (st==dr) { arb[nod]=val; return; } int mij=(st+dr)/2; if (poz<=mij) { update(st,mij,2*nod,poz,val); } else { update(mij+1,dr,2*nod+1,poz,val); } arb[nod]=max1(arb[2*nod],arb[2*nod+1]); } int query(int st,int dr,int nod,int ua,int ub) { if (ua<=st&&dr<=ub) { return arb[nod]; } int mij=(st+dr)/2,r1=0,r2=0; if (ua<=mij) { r1=query(st,mij,2*nod,ua,ub); } if (mij<ub) { r2=query(mij+1,dr,2*nod+1,ua,ub); } return max1(r1,r2); } int i,fr[300005],din[300005]; int main() { ios_base :: sync_with_stdio(false); cin.tie(0); #ifdef HOME ifstream cin("date.in"); ofstream cout("date.out"); #endif // HOME cin>>n>>d; for (i=1;i<=n;i++) { cin>>v[i]; m[v[i]]=1; } nr=1; for (auto ind: m) { nr++; m[ind.first]=nr; } for (i=1;i<=n;i++) { v[i]=m[v[i]]; } din[1]=1; h[v[1]].push({1,1}); update(1,n+1,1,v[1],1); int maxim=0; for (i=2;i<=n;i++) { if (i-d-1>0) { fr[i-d-1]=1; while (!h[v[i-d-1]].empty()&&fr[h[v[i-d-1]].top().second]==1) { h[v[i-d-1]].pop(); } if (!h[v[i-d-1]].empty()) { update(1,n+1,1,v[i-d-1],h[v[i-d-1]].top().first); } else { update(1,n+1,1,v[i-d-1],0); } } din[i]=query(1,n+1,1,v[i],v[i]); din[i]=max1(din[i],query(1,n+1,1,1,v[i]-1)+1); h[v[i]].push({din[i],i}); update(1,n+1,1,v[i],h[v[i]].top().first); } for (i=1;i<=n;i++) { maxim=max1(maxim,din[i]); } cout<<maxim; 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...