Submission #1148245

#TimeUsernameProblemLanguageResultExecution timeMemory
1148245hashimaliBouquet (EGOI24_bouquet)C++20
62 / 100
143 ms20348 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #define endl '\n' #define ld long double #define pb push_back #define pf push_front #define mod 10000007 #define se second #define fi first #define all(ls) (ls).begin(),(ls).end() #define int long long using namespace std; using namespace __gnu_pbds; template<typename type>using ordered_set=tree<type,null_type,less<type>,rb_tree_tag,tree_order_statistics_node_update>; template<typename type>using ordered_multiset=tree<type,null_type,less_equal<type>,rb_tree_tag,tree_order_statistics_node_update>; int n,t=1; const int N=2e5+10; vector<int>lz[N]; int seg[4*N],l[N],r[N],dp[N]; void upd(int v,int st,int en,int ind,int val){ if(st==en){ seg[v]=val; return; } int mid=(st+en)/2; if(st<=ind and ind<=mid) upd(v*2+1,st,mid,ind,val); if((mid+1)<=ind and ind<=en) upd(v*2+2,mid+1,en,ind,val); seg[v]=max(seg[v*2+1],seg[v*2+2]); } int get(int v,int st,int en,int l,int r){ if(st>en or st>r or en<l) return 0; if(l<=st and en<=r) return seg[v]; int mid=(st+en)/2; return max(get(v*2+1,st,mid,l,r),get(v*2+2,mid+1,en,l,r)); } void solve(){ cin>>n; for(int i=1;i<=n;i++){ cin>>l[i]>>r[i]; l[i]=i-l[i]-1; r[i]=i+r[i]+1; } for(int i=1;i<=n;i++){ for(int j:lz[i]) upd(0,0,n+1,j,dp[j]); if(l[i]>=1) dp[i]=get(0,0,n+1,1,l[i])+1; else dp[i]=1; lz[r[i]].pb(i); } cout<<*max_element(dp+1,dp+n+1)<<endl; } signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); // cin>>t; for(int i=1;i<=t;i++){ // cout<<"Scenario #"<<i<<":"<<" "; solve(); } }
#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...