#include <bits/stdc++.h>   using namespace std;   struct atom {     long long f, w, where;     void scan() { scanf( %I64d%I64d , &f, &w); }   } x[310000];   priority_queue<long long> A, B;   int compare(atom k1, atom k2) {     return k1.f > k2.f || (k1.f == k2.f && k1.where < k2.where);   }   int n, pre, ans, where;   long long rem;   void insert(long long k1) {     if (!B.empty()) {       long long k2 = B.top();       if (k2 > k1) {         A.push(-k2);         B.pop();         B.push(k1);         rem += k2 - k1;         return;       }     }     A.push(-k1);     pre++;   }   int main() {     scanf( %d , &n);     for (int i = 1; i <= n; i++) x[i].scan(), x[i].where = i;     n++;     x[n] = (atom){0, 0, n};     sort(x + 1, x + n + 1, compare);     pre = 0, ans = 0, where = 0;     long long rem = 0;     for (int i = 1; i <= n; i++)       if (x[i].where == 1) where = i;     ans = where;     pre = where;     for (int i = 1; i < where; i++) A.push(-(x[i].w - x[i].f + 1));     for (int i = where + 1; i <= n; i++) {       rem += x[i - 1].f - x[i].f;       if (i - 1 != where) insert(x[i - 1].w - x[i - 1].f + 1);       while (!A.empty()) {         long long k1 = -A.top();         if (k1 <= rem) {           rem -= k1;           pre--;           A.pop();         } else           break;       }       ans = min(ans, pre);     }     printf( %d n , ans);     return 0;   }   