在清华举办美食节的某一天的早上10点钟,有N个人试图去生煎包处排队,10点前发生了M个事件,事件大概分为以下4种
- 有人从队尾进入队伍
- 有人插队
- 有人等不及了从队伍中离开
要求10点钟时整个队伍的情况
输入格式:
输入第一行有两个用空格隔开的数N,M
接下来有M行,按时间先后顺序每行表述一个事件
I x:表示编号为x的人从队尾进入队伍
C x y:表示编号为x的人插队,排在y前一位
L x:表示编号为x的人从队伍中离开(这个人有可能还会回来)
我们保证同一时刻队伍里不会出现两个编号相同的人,也不会让没有进入队伍的人离开队伍且数据合法。
输出格式:
输出1行,表示队首到队尾所有人的编号,用空格隔开;如果队伍没有人输出“Bai Ren Zhan”(不含引号)
输入样例:
4 4
I 1
I 2
C 3 2
C 4 1
输出样例:
注意末尾有空格!!!
4 1 3 2
数据规模和约定
N<=100000,M<=100000
代码示例如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int a[100000];
int main()
{
int n,m;
int x,y;
char c;
int count=0;
scanf("%d %d",&n,&m);
for(int i=1;i<=m;i++)
{
getchar();
scanf("%c",&c);
if(c=='I')//排在队尾
{
scanf("%d",&x);
a[count]=x;
count++;
}
else if(c=='C')
{
scanf("%d %d",&x,&y);
for(int i=0;i<count;i++)
{
if(a[i]==y)
{
for(int j=count;j>i;j--)
{
a[j]=a[j-1];
}
a[i]=x;
break;
}
}
count++;
}
else if(c=='L')
{
scanf("%d",&x);
for(int i=0;i<count;i++)
{
if(a[i]==x)
{
for(int j=i;j<count-1;j++)
{
a[j]=a[j+1];
}
break;
}
}
count--;
}
}
if(count==0)
{
printf("Bai Ren Zhan\n");
}
else
{
for(int i=0;i<count;i++)
{
printf("%d ",a[i]);
}
}
}