1390: 队列问题(1)(vector模拟)

20 篇文章 0 订阅
16 篇文章 1 订阅

1390: 队列问题(1)
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 125 Solved: 50
[Submit][Status][Web Board]
Description

给定一个队列q,队列中的每个元素都有两种属性name和pri。对于队列有3中操作分别为: 1 name pri 代表向队列中添加(name,pri)这个元素。 2 代表输出队列中pri最高的元素的name并将该元素移除队列。 3 代表输出队列中pri最低的元素的name并将该元素移除队列。 假设队列初始为空,且所有元素的name值各不相同,pri值也各不相同。给定若干操作,对于2和3操作输出相应元素的name。
Input

每行输入分别代表一种操作,若输入为0则结束。(1<=name,pri<=10^6)
Output

对于每个2和3操作,输出对应的值。若队列中没有元素则输出0。
Sample Input

2
1 20 14
1 30 3
2
1 10 99
3
2
2
0

Sample Output

0
20
30
10
0

HINT

Source
//目前能力有限,用vector模拟的(效率不高)
AC_code:

#include <bits/stdc++.h>
using namespace std;
struct date
{
    int name;
    int pri;
};
bool cmp(date a,date b)
{
    return a.pri > b.pri;
}
int main()
{
    int n;
    vector<date>s;
    while(cin>>n&&n)
    {
        vector<date>::iterator it;
        date x;
        switch(n)
        {
        case 1:
            cin>>x.name>>x.pri;
            s.push_back(x);
            break;
        case 2:
            if(s.size())//必须先判断vector中是否有数据
            {
                sort(s.begin(),s.end(),cmp);
                it = s.begin();
                cout<<it->name<<endl;
                s.erase(it);
            }
            else
                cout<<"0"<<endl;
            break;
        case 3:
            if(s.size())
            {
                sort(s.begin(),s.end(),cmp);
                it = s.end()-1;//不是s.end()
                cout<<it->name<<endl;
                s.erase(it);
            }
            else
                cout<<"0"<<endl;
            break;
        }
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Leo Bliss

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值