不想多说
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<queue>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> abcd;
inline char nc(){
static char buf[100000],*p1=buf,*p2=buf;
if (p1==p2) { p2=(p1=buf)+fread(buf,1,100000,stdin); if (p1==p2) return EOF; }
return *p1++;
}
inline void read(ll &x){
char c=nc(),b=1;
for (;!(c>='0' && c<='9');c=nc()) if (c=='-') b=-1;
for (x=0;c>='0' && c<='9';x=x*10+c-'0',c=nc()); x*=b;
}
const int N=300005;
ll n; abcd a[N];
priority_queue<ll,vector<ll>,greater<ll> > Q;
int main(){
freopen("t.in","r",stdin);
freopen("t.out","w",stdout);
read(n);
for (int i=1;i<=n;i++) read(a[i].first),read(a[i].second);
sort(a+2,a+n+1);
int tot=0,ans=1<<30,pnt=n;
while (pnt>1 && a[pnt].first>a[1].first)
Q.push(a[pnt].second-a[pnt].first+1),tot++,pnt--;
ans=min(ans,tot);
while (!Q.empty()){
ll tem=Q.top(); Q.pop();
if (a[1].first<tem) break;
a[1].first-=tem; tot--;
while (pnt>1 && a[pnt].first>a[1].first)
Q.push(a[pnt].second-a[pnt].first+1),tot++,pnt--;
ans=min(ans,tot);
}
printf("%d\n",ans+1);
}