用n个优先队列。复杂度, 大概就这样吧。
#include <bits/stdc++.h>
using namespace std;
int main(){
int n,m;
int temp,temp2;
cin>>n>>m;
priority_queue<int>v[n];
for(int i=0;i<n;i++){
cin>>temp;
for(int j=0;j<temp;j++){
cin>>temp2;
v[i].push(temp2);
}
}
vector<int>vv;
for(int i=0;i<m;i++){
int max1=INT_MIN;
int loc=-1;
for(int j=0;j<n;j++){
if(v[j].empty())continue;
if(max1<v[j].top()){
max1=v[j].top();
loc=j;
}
}
v[loc].pop();
vv.push_back(max1);
}
for(int i=0;i<m;i++){
cout<<vv[i]<<" ";
}
cout<<endl;
}
京公网安备 11010502036488号