AcWing 827. 双链表
原题链接
简单
作者:
光在黑暗中发亮
,
2019-08-08 10:13:05
,
所有人可见
,
阅读 680
#include <iostream>
using namespace std;
const int n=100010;
int e[n],l[n],r[n],idx,head,tail;
void init()
{
r[0]=1;l[1]=0;
l[0]=-1;r[1]=-1;
idx=2;
}
void add_l(int x)
{
e[idx]=x;
l[idx]=0;
r[idx]=r[0];
l[r[0]]=idx;
r[0]=idx;
idx++;
}
void add_r(int x)
{
e[idx]=x;
r[idx]=1;
l[idx]=l[1];
r[l[1]]=idx;
l[1]=idx;
idx++;
}
void add_right(int k,int x)
{
e[idx]=x;
r[idx]=r[k];
l[idx]=k;
l[r[k]]=idx;
r[k]=idx;
idx++;
}
void add_left(int k,int x)
{
e[idx]=x;
l[idx]=l[k];
r[idx]=k;
r[l[k]]=idx;
l[k]=idx;
idx++;
}
void delet(int k)
{
l[r[k]]=l[k];
r[l[k]]=r[k];
}
int main()
{
int m;
cin>>m;
init();
while(m--)
{
int k,x;
char r;
cin>>r;
if(r=='L') {cin>>x;add_l(x);}
if(r=='R') {cin>>x;add_r(x);}
if(r=='D') {cin>>k;delet(k+1);}
if(r=='I') {cin>>r>>k>>x;if(r=='L') add_left(k+1,x);else add_right(k+1,x);}
}
for(int i=r[0];i!=1;i=r[i]) cout<<e[i]<<' ';
}