Submission #1257909

#TimeUsernameProblemLanguageResultExecution timeMemory
1257909ender_shayanFinancial Report (JOI21_financial)C++20
100 / 100
287 ms30400 KiB
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> pii; typedef pair<ll,ll> pll; #define fast_io ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); #define F first #define S second #define pb push_back #define all(x) x.begin(),x.end() #define Mp make_pair #define endl '\n' #define for1(n) for(int i=1;i<=n;i++) #define for0(n) for(int i=0;i<n;i++) #define lb lower_bound const ll mod=1e9+7; const int N=1e6+100; int A[N],m,k,n,q,mn[N],mx[N],dp[N],L[N],is[N],sz[N],par[N]; vector<pii>vec; set<int>C; int seg[N*4]; void upd(int i,int x,int l=1,int r=n+1,int v=1){ if(r-l==1){ seg[v]=x; return; } int mid=(l+r)>>1; if(i<mid)upd(i,x,l,mid,v<<1); else upd(i,x,mid,r,v<<1|1); seg[v]=max(seg[v<<1],seg[v<<1|1]); } int get(int lx,int rx,int l=1,int r=n+1,int v=1){ if(lx>=r || rx<=l)return 0; if(lx<=l && r<=rx)return seg[v]; int mid=(l+r)>>1; return max(get(lx,rx,l,mid,v<<1),get(lx,rx,mid,r,v<<1|1)); } int get_par(int v){ if(!par[v])return v; return par[v]=get_par(par[v]); } void merg(int u,int v){ u=get_par(u); v=get_par(v); if(u==v)return; if(sz[u]>sz[v])swap(u,v); par[u]=v; sz[v]+=sz[u]; mx[v]=max(mx[v],mx[u]); mn[v]=min(mn[v],mn[u]); } int main(){ fast_io cin>>n>>k; for1(n)cin>>A[i]; for1(n)vec.pb({A[i],-i}); sort(all(vec));reverse(all(vec)); C.insert(0); for1(n){sz[i]=1;mx[i]=i;mn[i]=i;} for(pii p:vec){ int i=-p.S; auto it=C.lb(i);it--; L[i]=(*it); is[i]=1; if(is[i-1])merg(i,i-1); if(is[i+1])merg(i,i+1); i=get_par(i); if(mx[i]-mn[i]+1>=k)C.insert(mx[i]); } reverse(all(vec)); int ans=0; for(pii p:vec){ int i=-p.S; dp[i]=get(L[i]+1,i)+1; upd(i,dp[i]); ans=max(ans,dp[i]); } cout<<ans<<endl; }
#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...