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...