P2107 小Z的AK计划 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1e5+100;
int n;
ll m;
ll sum=0,cnt=0,res=0;
//sum表示AK机房的总思考时间,cnt表示AK机房的个数,res记录最多AK机房数
struct node{
ll x,t;
friend bool operator < ( const node &a,const node &b )//重载堆的小于号(大根堆)
{
return a.t<b.t;
}
}f[N];
priority_queue < node > q;
bool cmp(node a,node b)
{
return a.x<b.x;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);cout.tie(nullptr);
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>f[i].x>>f[i].t;
sort(f+1,f+n+1,cmp);
for(int i=1;i<=n;i++)
{
while(!q.empty()&&q.top().t>f[i].t&&sum+f[i].t+f[i].x>m)
{
sum-=q.top().t;
q.pop();
cnt--;
}
if(sum+f[i].t+f[i].x<=m)
{
q.push(f[i]);
sum+=f[i].t;
cnt++;
}
res=max(cnt,res);
}
cout<<res<<endl;
return 0;
}