Submission #1148460

#TimeUsernameProblemLanguageResultExecution timeMemory
1148460SyedSohaib_123Bouquet (EGOI24_bouquet)C++20
24 / 100
30 ms20808 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],par[N];

int get(int a){
    if(a==par[a]) return a;
    return get(par[a]);
}

void solve(int tst){
    int n;
    cin>>n;
    int ans=0;
    set<int>s;
    par[0]=0;
    for(int i=1;i<=n;i++) dp[i]=1,par[i]=i-1;
    for(int i=1;i<=n;i++){
        int l,r;
        cin>>l>>r;
        for(auto [ind,v]:g[i]){
            for(int j=ind;j>=1;j--){
                if(par[j]==j){
                    val[ind]=max(val[ind],val[j]);
                    break;
                }
            }
            par[ind]=ind;
        }
        int x=max(0ll,i-l-1),y=i+1+r;
        for(int j=x;j>=1;j--){
            if(par[j]==j){
                dp[i]=max(dp[i],val[j]+1);
                break;
            }
        }
        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...