HDU-1908-Double Queue

银行排队服务算法
本文介绍了一个银行排队服务问题的解决方案,使用STL vector结合二分查找实现请求的插入与处理。支持三种操作:添加请求、处理最高优先级请求、处理最低优先级请求。

在博弈专项练习做到这个题~ 其实就是银行排队服务的一个题,然后这个题有2种处理方式,1代表请求,2代表现在处理排队队列中优先级最高的,3代表现在处理排队队列中优先级最低的。我用的STL vector+二分查找的

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
const int maxn=1e6+1000;
struct Request 
{
    int id;
    int val;
    Request(int sid,int sval)
    {
        id=sid;
        val=sval;
    }
    bool operator < (const Request &a)const
    {
        return val<a.val;
    }
};
vector<Request> r;
vector<Request>::iterator it;
int main()
{
    while(1)
    {
        int op;
        scanf("%d",&op);
        if(op==0)
            break;
        if(op==1)
        {
            int id,w;
            scanf("%d%d",&id,&w);
            it=lower_bound(r.begin(),r.end(),Request(id,w));
            r.insert(it,Request(id,w));
        }
        else if(op==2)
        {
            if(r.size()==0)
            {
                printf("0\n");
                continue;
            }
            printf("%d\n",r[r.size()-1].id);
            r.erase(r.begin()+r.size()-1);
        }
        else
        {
            if(r.size()==0)
            {
                printf("0\n");
                continue;
            }
            printf("%d\n",r[0].id);
            r.erase(r.begin());
        }
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值