优先队列!!!

相关函数功能

函数名 功能
top() 返回队列头部数据
push(elem) 在队列尾部增加elem数据
pop() 队列头部数据出队
empty() 判断队列是否为空
size() 返回队列中数据的个数

代码实现

#include <iostream>
#include <queue>
using namespace std;
int n,x;
priority_queue<int, vector<int>,greater<int>>q;//定义小根堆
int main(){
    cin>>n;
    for( int i= 0; i<n; ++i ){
        cin>>x;
        q.push(x);//插入元素
    }
    while(!q.empty()){
        cout << q.top()<< endl;//输出队头值
        q.pop();//弹出队头
    }
}

代码复制

从小到大

#include <bits/stdc++.h>
using namespace std;
int n,x;
priority_queue<int,vector<int>,greater<int>> q;
int main(){
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>x;
		q.push(x);
	}
	while(!q.empty()){
		cout<<q.top()<<endl;
		q.pop();
	}
	return 0;
}

从大到小

方案一

#include <bits/stdc++.h>
using namespace std;
int n,x;
priority_queue<int,vector<int>,greater<int>> q;
int main(){
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>x;
		q.push(-x);
	}
	while(!q.empty()){
		cout<<-q.top()<<endl;
		q.pop();
	}
	return 0;
}

方案二

#include <bits/stdc++.h>
using namespace std;
int n,x;
priority_queue<int> q;
int main(){
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>x;
		q.push(x);
	}
	while(!q.empty()){
		cout<<q.top()<<endl;
		q.pop();
	}
	return 0;
}