马蜂良好但是显示第一行太短
#include<bits/stdc++.h>
using namespace std;
struct Print{
int id, t;
bool operator <(const Print x)const{
if (t == x.t) return id > x.id;
return t > x.t;
}
};
struct Text{
int start, time, id;
}txt[200005];
bool cmp(Text a, Text b){
return a.start < b.start;
}
int n, m;
vector<int> d[200005];
priority_queue<Print> p1, p2;
int main(){
cin >> n >> m;
for (int i = 1; i <= m; i ++){
Print kk; kk.id = i, kk.t = 0;
p1.push(kk);
}
for (int i = 1; i <= n; i ++){
scanf("%d%d", &txt[i].time, &txt[i].start);
txt[i].id = i;
}
sort(txt + 1, txt + n + 1, cmp);
for (int i = 1; i <= n; i ++){
while (!p2.empty() && p2.top().t <= txt[i].start){
Print kk = p2.top();kk.t = 0;
p1.push(kk);
p2.pop();
}
if (p1.empty()){
p1.push(p2.top());
p2.pop();
}
Print kk = p1.top(); p1.pop();
d[kk.id].push_back(txt[i].id);
kk.t = max(kk.t, txt[i].start) + txt[i].time;
// printf("%d用的%d号打印机,结束时间为%d\n", txt[i].id, kk.id, kk.t);
p2.push(kk);
}
// while (!p2.empty()){
// cout << p2.top().id << " ";
// p2.pop();
// }
cout << endl;
for (int i = 1; i <= m; i ++){
printf("%d ", d[i].size());
sort(d[i].begin(), d[i].end());
for (int j = 0; j < d[i].size(); j ++) printf("%d ", d[i][j]);
printf("\n");
}
return 0;
}