1171 Replacement Selection + 优先队列
这题不能用set,因为你无法确保不产生重复数据。可以使用优先队列,内部使用堆来实现。
#include<queue>
#include<iostream>
#include<climits>
using namespace std;
int main() {
priority_queue<int, vector<int>, greater<int> > que;
int n, m;
cin>>n>>m;
vector<int> arr(n);
for (int i=0;i<n;i++){
cin>>arr[i];
}
vector<int> line,v;//存放当前轮和下一轮。
int count = 0;
int index=0;
for(;index<m;index++)que.push(arr[index]);
int minimax = INT_MIN;
while (count < n){
minimax = que.top();
line.push_back(minimax);
que.pop();
if (index < n){
if (arr[index] > minimax) {
que.push(arr[index++]);
}else{
v.push_back(arr[index++]);
}
}
if (que.empty()) {
// 说明当前轮完了
for(int i=0;i<line.size();i++){
i&&cout<<" ";
cout<<line[i];
}
cout <<'\n';
line.clear();
for(int i=0;i<v.size();i++){
que.push(v[i]);
}
v.clear();
}
}
return 0;
}

浙公网安备 33010602011771号