题目链接: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;
}