제출 #1148468

#제출 시각아이디문제언어결과실행 시간메모리
1148468SyedSohaib_123Bouquet (EGOI24_bouquet)C++20
100 / 100
89 ms23332 KiB
#include <bits/stdc++.h> using namespace std; #define append push_back #define int long long const int N=4e5+10,LG=21; int mod=998244353; vector<pair<int,int>>g[N]; int dp[N],val[N],tree[N<<2]; int get(int l,int r,int s,int a,int b){ if(r<a or l>b) return 0; if(a<=l and r<=b) return tree[s];int m=(l+r)>>1; return max(get(l,m,s*2,a,b),get(m+1,r,s*2+1,a,b)); } void upd(int l,int r,int s,int a,int b){ if(r<a or l>a) return; if(l==r){ tree[s]=b;return; } int m=(l+r)>>1; upd(l,m,s*2,a,b); upd(m+1,r,s*2+1,a,b); tree[s]=max(tree[s*2],tree[s*2+1]); } void solve(int tst){ int n; cin>>n; int ans=0; for(int i=1;i<=n;i++) dp[i]=1; for(int i=1;i<=n;i++){ int l,r; cin>>l>>r; for(auto [ind,v]:g[i]){ val[ind]=v; upd(1,n,1,ind,v); } int x=max(0ll,i-l-1),y=i+1+r; dp[i]=get(1,n,1,1,x)+1; if(y<=n) g[y].append({i,dp[i]}); ans=max(ans,dp[i]); val[i]=dp[i]; } cout<<ans<<endl; } signed main(){ ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); int t = 1; // cin >> t; for(int i=1;i<=t;i++) solve(i); }
#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...