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

posted @ 2023-05-08 09:36  江韵阁  阅读(70)  评论(0)    收藏  举报