这是一个典型的贪心题(一看到题目我就发现早就写过了 复制粘贴就过了
我们首先排序一下截止时间从小到大 然后用一个大根堆存维修时间 用一个变量存总维修时间
当这个抢修这个新的房子发现时间不够时 弹出大根堆堆顶 如果减去这个时间加上当前时间小于之前的时间 就可以更新了 把抢修那个房子换成这个房子

#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll const N=150010;
ll n,l,r,ans,tl;
priority_queue <ll,vector<ll>,less<ll>  >tt;
struct T{ll a,b;}t[N];
bool cmp(T x,T y){return x.b<y.b;}
int main()
{
   cin>>n;
   for(int i=1;i<=n;++i)cin>>t[i].a>>t[i].b;
   sort(t+1,t+1+n,cmp);
   tl=t[1].a,ans=1,tt.push(t[1].a);
   for(int i=2;i<=n;++i)
   {
       if(tl+t[i].a<t[i].b){ans++;tl+=t[i].a;tt.push(t[i].a);}
       else
       {
           l=tt.top();
           if(tl-l+t[i].a<tl)
           {
               tt.pop();
               tl=tl-l+t[i].a;
               tt.push(t[i].a);
           }
       }
   }
   cout<<ans<<endl;
  return 0;
}