#include <bits/stdc++.h>
using namespace std;
#define all(x) (x).begin(), (x).end()
using pii = pair<int, int>;
struct Ftm {
vector<int> bit;
int n;
const int INF = 0;
Ftm(int n) {
this->n = n;
bit.assign(n, INF);
}
int getmax(int r) {
int ret = INF;
for (; r >= 0; r = (r & (r + 1)) - 1)
ret = max(ret, bit[r]);
return ret;
}
void update(int idx, int val) {
for (; idx < n; idx = idx | (idx + 1))
bit[idx] = max(bit[idx], val);
}
};
void solve(){
int n;cin>>n;
Ftm mn(n+1);
vector<pii> a={{0, 0}};
for(int i = 1;i<=n;i++){
int x, y;cin>>x>>y;
a.push_back({max(1, i-x), min(n, i+y)});
}
vector<int> reses={0};
int res=0;
priority_queue<pii, vector<pii>, greater<pii>> pq={};
for(int i =1;i<=n;i++){
while(!pq.empty() && pq.top().first<i){
mn.update(pq.top().second, reses[pq.top().second]);
pq.pop();
}
reses.push_back(1+mn.getmax(a[i].first-1));
res=max(res, reses.back());
pq.push({a[i].second, i});
}
cout << res << '\n';
}
signed main(){
ios_base::sync_with_stdio(false);cin.tie(0);
int T=1;//cin>>T;
while(T--)solve();
}
| # | 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... |