方法一 直接调用 用 O(n)的查询来找最小值也可以
方法二 然后用set 也可以进行排序
两种方式
#include<stdio.h>
#include<set>
#include<iostream>
using namespace std;
struct node{
int num,pro;
bool operator <(const node &a)const{
return a.pro<pro;
}
} p;
set<node> str;
set<node>::iterator pos;
int main()
{
int judge,sum=0;
while(scanf("%d",&judge)!=EOF){
if(judge==1){
scanf("%d%d",&p.num,&p.pro);
str.insert(p);
sum++;
}
if(judge==3){
if(sum==0){
printf("0\n");
continue;
}
pos=str.end();
pos--;
//cout<<(*pos).num<<endl;
printf("%d\n",(*pos).num);
str.erase(pos);
sum--;
}
if(judge==2){
if(sum==0){
printf("0\n");
continue;
}
pos=str.begin();
printf("%d\n",(*pos).num);
str.erase(pos);
sum--;
}
if(judge==0) break;
}
return 0;
}

本文介绍了一种使用双队列结构实现O(n)复杂度查询最小值的方法,并通过C++代码实例展示了实现过程。

被折叠的 条评论
为什么被折叠?



