Submission #1130062

#TimeUsernameProblemLanguageResultExecution timeMemory
1130062irmuunBouquet (EGOI24_bouquet)C++20
100 / 100
121 ms16852 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define ff first #define ss second #define all(s) s.begin(),s.end() #define rall(s) s.rbegin(),s.rend() struct segtree{ vector<int>d; void init(int n){ d.resize(4*n+4); build(1,0,n); } void build(int v,int l,int r){ if(l==r){ d[v]=0; return; } int mid=(l+r)>>1; build(v*2,l,mid); build(v*2+1,mid+1,r); d[v]=0; } int query(int v,int l,int r,int L,int R){ if(L>R||l>R||L>r) return 0; if(L<=l&&r<=R){ return d[v]; } int mid=(l+r)>>1; return max(query(v*2,l,mid,L,R),query(v*2+1,mid+1,r,L,R)); } void update(int v,int l,int r,int pos,int val){ if(r<pos||pos<l) return; if(l==r){ d[v]=val; return; } int mid=(l+r)>>1; update(v*2,l,mid,pos,val); update(v*2+1,mid+1,r,pos,val); d[v]=max(d[v*2],d[v*2+1]); } }; int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n; cin>>n; int l[n+5],r[n+5]; vector<int>v[n+5]; for(int i=1;i<=n;i++){ cin>>l[i]>>r[i]; int R=min(i+r[i]+1,n+1); v[R].pb(i); } vector<int>dp(n+5,0); segtree sg; sg.init(n); for(int i=1;i<=n;i++){ for(int j:v[i]){ sg.update(1,0,n,j,dp[j]); } int L=max(i-l[i]-1,0); dp[i]=sg.query(1,0,n,0,L)+1; } int ans=0; for(int i=1;i<=n;i++){ ans=max(ans,dp[i]); } cout<<ans; }
#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...