方法:
双端队列。
注意删除队列中的因命令已经排到队首的元素。
AC代码:
#include <cstdio>
#include <iostream>
#include <deque>
#include <algorithm>
using namespace std;
const int maxn = 1000+10;
int main()
{
int p,n;
int kase = 0;
while(scanf("%d%d",&p,&n)==2&&p&&n)
{
cout<<"Case "<<++kase<<":"<<endl;
deque<int> s;
for(int i=1;i<=p&&i<=maxn;i++)
{
s.push_back(i);
}
while(n--)
{
char cmd;
cin>>cmd;
if(cmd=='E')
{
int x;
cin>>x;
s.erase(remove(s.begin(),s.end(),x),s.end());
s.push_front(x);
}
else if(cmd=='N')
{
cout<<s.front()<<endl;
s.push_back(s.front());
s.pop_front();
}
}
}
return 0;
}