#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int n, ft[N];
void update(int x, int d) {
  while(x <= n) ft[x] = max(ft[x], d), x += (x & -x);
}
int get(int l)
{
  int ans = 0;
  while(l > 0) ans = max(ans, ft[l]), l -= (l & -l);
  return ans;
}
int main()
{
  int ans = 0;
  cin >> n;
  set<vector<int> > up;
  
  for(int i = 1; i <= n; i ++)
    {
      while(up.size() && up.begin()->at(0) < i)
	{
	  update(up.begin()->at(1), up.begin()->at(2));
	  up.erase(up.begin());
	}
      
      int l, r;
      cin >> l >> r;
      int sol = 1 + get(i - l - 1);
      ans = max(ans, sol);
      up.insert({i + r, i, sol});
    }
  cout << ans << endl;
  return 0;
}
| # | 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... |