用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; }