注意点
输入字符要用 string !!!
代码
#include <string>
#include <iostream>
using namespace std;
const int N = 100000;
int idx, e[N+5], fr[N+5], ne[N+5];
void init()
{
fr[1]=0;
ne[0]=1;
idx=2;
}
void insertL(int x)
{
fr[idx]=0;
ne[idx]=ne[0];
ne[0]=idx;
fr[ne[idx]]=idx;
e[idx++]=x;
}
void insertR(int x)
{
ne[idx]=1;
fr[idx]=fr[1];
ne[fr[idx]]=idx;
fr[1]=idx;
e[idx++]=x;
}
void insertIL(int x, int k)
{
fr[idx]=fr[k];
ne[idx]=k;
ne[fr[idx]]=idx;
fr[k]=idx;
e[idx++]=x;
}
void insertIR(int x, int k)
{
ne[idx]=ne[k];
fr[idx]=k;
fr[ne[idx]]=idx;
ne[k]=idx;
e[idx++]=x;
}
void delK(int k)
{
ne[fr[k]]=ne[k];
fr[ne[k]]=fr[k];
}
int main() {
int m;
init();
cin >> m;
while (m--) {
string s;
int oper_one, oper_two;
cin >> s;
if (s == "L") {
cin >> oper_one;
insertL(oper_one);
}
else if (s == "R") {
cin >> oper_one;
insertR(oper_one);
}
else if (s == "D") {
cin >> oper_two;
delK(oper_two+1);
}
else if (s == "IL") {
cin >> oper_two >> oper_one;
insertIL(oper_one, oper_two+1);
}
else if (s == "IR") {
cin >> oper_two >> oper_one;
insertIR(oper_one, oper_two+1);
}
}
for (int index=ne[0]; index!=1; index=ne[index]) cout << e[index] << " ";
return 0;
}