#pragma GCC optimize("O3,Ofast")
#include <bits/stdc++.h>
//define int long long
using namespace std;
    const int MOD  = 1e9 + 7;
struct FENWICK{
    vector<int> a;
    int n;
    FENWICK(int _n){
        n = _n;
        a.resize(n + 1);
    }
    void update(int idx , int val){
        for(;idx <= n ; idx += idx & -idx)a[idx] = max(a[idx] , val);
    }
    int query(int idx){
        int ans = 0;
        for(;idx > 0;idx -= idx & -idx)ans = max(ans , a[idx]);
        return ans;
    }
};
int32_t main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n , ans = 0;
    cin >> n;
    FENWICK fen(n + 1);
    vector<int> pen_val(n + 1);
    vector<pair<int , int>> segment(n + 1);
    vector<vector<int>> segmentF(n + 1);
    for(int i = 1 ; i <= n ; i++){
        cin >> segment[i].first >> segment[i].second;
        segment[i].first = max(1 , i - segment[i].first);
        segment[i].second = min(n , i + segment[i].second);
        segmentF[segment[i].second].push_back(i);
    }
    for(int i = 1 ; i <= n ; i++){
        pen_val[i] = fen.query(segment[i].first - 1) + 1;
        ans = max(ans , pen_val[i]);
        for(int j : segmentF[i]){
            fen.update(j , pen_val[j]);
        }
    }
    cout << ans;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |