Submission #1235253

#TimeUsernameProblemLanguageResultExecution timeMemory
1235253p4r4d0_xBouquet (EGOI24_bouquet)C++20
100 / 100
85 ms24904 KiB
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define ff first
#define ss second


struct SEGTREE{
    ll n;
    vector<ll> tree;
    void upd(ll N, ll L, ll R, ll i, ll s){
        if(i < L || i > R)return;
        if(L == R){
            tree[N] = s;
            return;
        }
        ll M = (L + R) / 2;
        upd(2 * N + 1, L, M, i, s);
        upd(2 * N + 2, M + 1, R, i, s);
        tree[N] = max(tree[2 * N + 1], tree[2 * N + 2]);
    }
 
    ll get(ll N, ll L, ll R, ll l, ll r){
        if(L >= l && R <= r)return tree[N];
        if(L > r || R < l)return 0;
        ll M = (L + R) / 2;
        return max(get(2 * N + 1, L, M, l, r), get(2 * N + 2, M + 1, R, l, r));
    }
 
    SEGTREE(ll sz){
        n = 1;
        while(n < sz)n *= 2;
        tree = vector<ll>(2 * n, 0);
    }
 
    void upd(ll i, ll s){
        upd(0, 0, n - 1, i, s);
    }
 
    ll get(ll l, ll r){
        return get(0, 0, n - 1, l, r);
    }
};



void solve(){
    int n; cin >> n;
    vector<pair<int, int>> a(n + 1);
    SEGTREE seg(n+1);
    for(int i = 1; i <= n; ++i){
        cin >> a[i].ff >> a[i].ss;
    }
    vector<ll> dp(n * 2 + 2);
    vector<vector<pair<int,int>>>st(n*2+2);
    for(int i = 1; i <= n; ++i){
        for(auto&j:st[i]){
            seg.upd(j.ff,j.ss);
        }
        dp[i]= seg.get(0,i-a[i].ff-1)+1;
        st[i+a[i].ss+1].pb({i,dp[i]});
    }
    cout<<*max_element(begin(dp),end(dp)) <<"\n";
}


//1 1 0 1 0 1 0 0 1 1 1

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL), cout.tie(NULL);
    ll t = 1;
    //cin >> t;
    while(t--){
        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...