这道题开始是用map做的,利用的是map的按键值的从小到大插入到map的性质,这样的话就能对这个优先值进行处理了。
后面看到同学的一个题解,是用的双端队列做。。
陈列出来吧:
map:
#include<iostream>
#include<map>
using namespace std;
int main()
{
map<int ,int >m;
int x;
while(cin>>x)
{
map<int ,int>::iterator it;
if(x==1)
{
int a,b;
cin>>a>>b;
m[b]=a;
}
if(x==2)
{
if(m.size()==0)
{
cout<<"0"<<endl;
continue;
}
it=m.end();
it--;
cout<<(*it).second<<endl;
m.erase((*it).first);//map里面erase里面删除的是键值
}
if(x==3)
{
if(m.size()==0)
{
cout<<"0"<<endl;
continue;
}
it=m.begin();
cout<<(*it).second<<endl;
m.erase((*it).first);
}
if(x==0)
{
break;
}
}
return 0;
}
deque:
#include<bits/stdc++.h>
using namespace std;
struct Node
{
int ranks;
int data;
}nod;
int main()
{
int type;
deque<Node>d;
while(scanf("%d",&type)!=EOF&&type)
{
deque<Node>::iterator it;
if(type==1)
{
scanf("%d%d",&nod.data,&nod.ranks);
if(d.empty())
{
d.push_back(nod);
// for(int i=0;i<d.size();i++)
// {
// cout<<d[i].data<<" ";
// }
// cout<<endl;
continue;
}
if(nod.ranks>d.back().ranks)
d.push_back(nod);
else
if(nod.ranks<d.front().ranks)
d.push_front(nod);
else
{
for(it=d.begin();it!=d.end();it++)
{
if(nod.ranks<(*it).ranks)
break;
}
d.insert(it,nod);
}
// for(int i=0;i<d.size();i++)
// {
// cout<<d[i].data<<" ";
// }
// cout<<endl;
}
if(type==3)
{
if(d.empty())
{
cout<<0<<endl;
continue;
}
cout<<d.front().data<<endl;
d.pop_front();
}
else if(type==2)
{
if(d.empty())
{
cout<<0<<endl;
continue;
}
cout<<d.back().data<<endl;
d.pop_back();
}
}
return 0;
}