2016 Personal Training #1 Div.2 D - 1D Cafeteria (B) Gym 100989D

来源:互联网 发布:高校教师招聘考试知乎 编辑:程序博客网 时间:2024/06/05 06:17

题意:给你N个数编号从1到N每个数代表座位个数,然后Q行每行in num的就是进来num个人你需要做的就是将这num个人放到编号最小但座位数大于等于num的地方,out num就是编号为num的地方人离开,那么你就可以在这坐人了,然后每个in输入输出你所选的地方,如果没有地方可选就输出-1;

这题用set做,需要知道set<pair<int,int> >用法

#include <bits/stdc++.h>using namespace std;#define INF 0x3f3f3f3fchar str[10];int a[100005];int main(){  int n,m,num;  scanf("%d%d",&n,&m);  set<pair<int ,int> >s;  set<pair<int,int> > ::iterator it;  for(int i=1;i<=n;i++)  {    scanf("%d",&a[i]);    s.insert(make_pair(a[i],i));  }  while(m--)  {    cin>>str>>num;    if(str[0]=='i')    {      it=s.lower_bound(make_pair(num,0));      if(it==s.end())      {        printf("-1\n");      }      else      {        printf("%d\n",it->second);        s.erase(it);      }    }    else    {      s.insert(make_pair(a[num],num));    }  }}


0 0
原创粉丝点击