社区讨论

为啥一定要把入堆放在出堆之前

P2107小 Z 的 AK 计划参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@m3u03232
此快照首次捕获于
2024/11/23 18:01
去年
此快照最后确认于
2025/11/04 14:05
4 个月前
查看原帖
我这个代码时间和sumsum是分开算的,但依然需要把入堆放在前面,为啥呢? WAon#13代码:
CPP
#include <bits/stdc++.h>
#define int uint64_t
//#define int __int128
//#define MOD (1000000007)
//#define eps (1e-6)
#define endl '\n'
#define debug_endl cout<<endl;
#define debug cout<<"debug"<<endl;
using namespace std;
const int MAXN=1e5+10;
int n,m,ans,sum;
priority_queue<int> q;//选中的房间思考时间之和
struct Room{
	int x,t;
}a[MAXN];
bool cmp(Room A,Room B){
	return (A.x==B.x?A.t<B.t:A.x<B.x);
};
signed main(){
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<=n;++i){
		cin>>a[i].x>>a[i].t;
	}
	sort(a+1,a+n+1,cmp);
	for(int i=1;i<=n;++i){
		sum+=a[i].t;
		while(!q.empty()&&sum+a[i].x>m){
			sum-=q.top();
			q.pop();
		}
		q.emplace(a[i].t);
		ans=max(ans,(int)q.size());
	}
	cout<<ans;
	return 0;
}

回复

3 条回复,欢迎继续交流。

正在加载回复...