Gym100989D

题目链接:http://codeforces.com/gym/100989/problem/D

题目大意:有n个餐桌,每个餐桌有各自一定数量的椅子,餐桌编号从1到n,编号越小越靠近窗户,编号越大越靠近门,q表示来或离开总共有q波人,in表示每一波进餐馆客人的人数,out表示编号为x的餐桌上的客人全离开,要求尽可能给进来的客人安排靠近窗户的位置即餐桌编号最小,如果有,就输出该餐桌编号,如果没有就输出-1。

#include<iostream>
#include<cstring>
#include<set>
using namespace std;
set<pair<int,int> >s;
set<pair<int,int> >::iterator it;
int n,q,ch,zhuo[100010];
char str[10];
int main()
{
    while(cin>>n>>q)
    {
        for(int i=1;i<=n;i++)
        {
            cin>>zhuo[i];
            s.insert(make_pair(zhuo[i],i));//插入 
        }
        for(int i=1;i<=q;i++)
        {
            cin>>str>>ch;
            if(str[0]=='i')
            {
                it=s.lower_bound(make_pair(ch,0));//找最小的 
                if(it==s.end())
                cout<<-1<<endl;
                else
                {
                    cout<<it->second<<endl;
                    s.erase(it);//删除 
                }
            }
            else if(str[0]=='o')
            {
                s.insert(make_pair(zhuo[ch],ch));
            }
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41515833/article/details/80949507