#include <bits/stdc++.h>
using namespace std;
#define F first
#define S second
typedef pair<int, int> pii;
const int N = 2e5 + 100;
int n, dp[N];
pii a[N];
vector<pii> vec[N];
int main(){
cin >> n;
set<pii> st;
for (int i = 1; i <= n; i ++){
int l, r;
cin >> l >> r;
if (i - l < 1) l = i - 1;
if (i + r > n) r = n - i;
a[i] = {l, r};
}
int ans = 0;
st.insert({0, 1});
for (int i = 1; i <= n; i ++){
auto it = st.lower_bound({i - a[i].F, 0});
it--;
dp[i] = (*it).second;
ans = max(ans, dp[i]);
vec[i + a[i].S].push_back({i, dp[i] + 1});
for (auto [j, dpj] : vec[i]){
st.insert({j, dpj});
auto it = st.find({j, dpj});
if (it != st.begin()){
it--;
if ((*it).second >= dpj)
st.erase({j, dpj});
}
while (st.find({j, dpj}) != st.end()){
auto it = st.find({j, dpj});
it++;
if (it == st.end()) break;
if ((*it).second <= dpj)
st.erase(it);
else
break;
}
}
}
cout << ans << endl;
}
# | 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... |