Submission #1241869

#TimeUsernameProblemLanguageResultExecution timeMemory
1241869AMel0nBouquet (EGOI24_bouquet)C++20
100 / 100
56 ms22344 KiB
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
#define FOR(i,N) for(ll i = 0; i < N; i++)
#define all(x) (x).begin(), (x).end()
#define F first
#define S second


signed main() {
    cin.tie(0); ios::sync_with_stdio(false);
    ll N;
    cin >> N;
    vector<ll> L(N), R(N);
    FOR(i, N) cin >> L[i] >> R[i];
    vector<vector<ll>> todo(N*2+5);
    vector<ll> dp(N), B(N+5, 1e18); // B[k] = min j such that dp[j] >= k
    dp[0] = 1;
    B[0] = -1;
    todo[R[0] + 1].push_back(0);
    for(ll i = 1; i < N; i++) {
        for(ll j: todo[i]) B[dp[j]] = min(B[dp[j]], j);
        ll lo = 0, hi = N;
        while(lo < hi - 1) {
            ll mid = (lo + hi) / 2;
            if (B[mid] < i-L[i]) lo = mid;
            else hi = mid;
        }
        dp[i] = 1 + lo;
        todo[i + R[i] + 1].push_back(i);
    }
    cout << *max_element(all(dp));
}
#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...