func_code_string: #include <bits/stdc++.h>   using namespace std;   const long double pi = acos(-1);   const long long inf = 1LL << 30;   const double eps = 1e-9;   const long long mod = 1e9 + 7;   const int N = 100100;   pair<int, pair<int, int>> a[N];   int seg[N << 2], lazy[N << 2];   ;   int ans[N];   int dp[N];   void push(int nd, int L, int R) {     if (lazy[nd] == 0) return;     seg[nd] = 0;     if (L != R) {       lazy[nd << 1] = 1;       lazy[nd << 1 | 1] = 1;     }     lazy[nd] = 0;   }   void update(int nd, int L, int R, int idx, int val) {     if (L == R) {       seg[nd] = val;       return;     }     int mid = (L + R) >> 1;     if (idx <= mid)       update(nd << 1, L, mid, idx, val);     else       update(nd << 1 | 1, mid + 1, R, idx, val);     seg[nd] = seg[nd << 1] + seg[nd << 1 | 1];   }   long long query(int nd, int L, int R, int from, int to) {     push(nd, L, R);     if (from <= L && R <= to) return seg[nd];     if (from > R || to < L) return 0;     int mid = (L + R) >> 1;     long long leftAns = query(nd << 1, L, mid, from, to);     long long rightAns = query(nd << 1 | 1, mid + 1, R, from, to);     return leftAns + rightAns;   }   void updateRange(int nd, int L, int R, int from, int to) {     push(nd, L, R);     if (R < from || L > to) return;     if (from <= L && R <= to) {       lazy[nd] = 1;       push(nd, L, R);       return;     }     int mid = (L + R) >> 1;     updateRange(nd << 1, L, mid, from, to);     updateRange(nd << 1 | 1, mid + 1, R, from, to);     seg[nd] = seg[nd << 1] + seg[nd << 1 | 1];   }   int main() {     int n;     scanf( %d , &n);     for (int i = 0; i < n; i++) {       scanf( %d%d , &a[i].first, &a[i].second.first);       a[i].second.second = i;     }     sort(a, a + n);     for (int i = n - 1; i >= 0; i--) {       int j = lower_bound(                   a, a + n,                   make_pair(a[i].first + a[i].second.first, make_pair(0, 0))) -               a - 1;       dp[i] = 1 + query(1, 1, n, i, j);       updateRange(1, 1, n, i + 1, j);       update(1, 1, n, i, dp[i]);       ans[a[i].second.second] = dp[i];     }     for (int i = 0; i < n; i++) printf( %d  , ans[i]);   }   