제출 #1314350

#제출 시각아이디문제언어결과실행 시간메모리
1314350boclobanchatFinancial Report (JOI21_financial)C++20
100 / 100
373 ms20972 KiB
#include<bits/stdc++.h> using namespace std; const int MAXN=3e5+5; int seg[MAXN*4],A[MAXN],pos[MAXN]; set<int> st; bool comp(int a,int b) { if(A[a]==A[b]) return a>b; return A[a]<A[b]; } void update(int l,int r,int i,int val,int pos) { if(i<l||r<i) return ; if(l==r) { seg[pos]=val; return ; } int mid=(l+r)/2; update(l,mid,i,val,pos*2); update(mid+1,r,i,val,pos*2+1); seg[pos]=max(seg[pos*2],seg[pos*2+1]); } int get(int l,int r,int u,int v,int pos) { if(u>v) return 0; if(u<=l&&r<=v) return seg[pos]; int mid=(l+r)/2; if(v<=mid) return get(l,mid,u,v,pos*2); if(mid+1<=u) return get(mid+1,r,u,v,pos*2+1); return max(get(l,mid,u,v,pos*2),get(mid+1,r,u,v,pos*2+1)); } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,d; cin>>n>>d; for(int i=d;i<=n;i++) st.insert(i); for(int i=1;i<=n;i++) { cin>>A[i]; pos[i]=i; } sort(pos+1,pos+n+1,comp); st.insert(0),st.insert(n+d+67); for(int i=1;i<=n;i++) { int p=pos[i]; update(1,n,p,get(1,n,*prev(st.lower_bound(p))+1,p-1,1)+1,1); while((*st.lower_bound(p))<=p+d-1) st.erase(st.lower_bound(p)); } cout<<seg[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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...