re60分,求调
查看原帖
re60分,求调
1063582
张东篱2011楼主2024/11/29 22:07
#include<bits/stdc++.h>
using namespace std;
struct node{
	int s,t,id;
}a[1000005];
bool operator <(node a,node b)
{
	return a.t<b.t;
}
vector<int> ans[1000005];
struct res{
	int now,id;
	bool operator <(const res &x) const{
		return now>x.now or (now==x.now and id>x.id);
	}
};
priority_queue <res> q1,q2;
int main()
{
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++) {	cin>>a[i].s>>a[i].t;a[i].id=i;}
	sort(a+1,a+1+n);
	for(int i=1;i<=m;i++) q1.push(res{0,i});
	for(int i=1;i<=n;i++)
	{
		if(!q2.empty())
		{
			vector<int> v;
			while(!q2.empty())
			{
				int x=q2.top().now;
				if(x>a[i].t) break;
				v.push_back(q2.top().id);
				q2.pop();
			}
			for(int j=0;j<v.size();j++) q1.push(res{0,v[j]});
		}
		int id;
		if(!q1.empty())
		{
			id=q1.top().id;
			q1.pop();
			q2.push(res{a[i].t+a[i].s,id});
		}
		else
		{
			id=q1.top().id;
			q2.push(res{q1.top().now+a[i].s,id});
			q1.pop();
		}
		ans[id].push_back(a[i].id);
	}
	for(int i=1;i<=m;i++)
	{
		cout<<ans[i].size()<<" ";
		sort(ans[i].begin(),ans[i].end());
		for(int j=0;j<ans[i].size();j++) cout<<ans[i][j]<<" ";
		cout<<endl;
	}
	return 0;
}
2024/11/29 22:07
加载中...