自己搞出BUG的地方
在我打//的f地方可以看到我写反了.当时自己觉得这里的顺序是无所谓的然后运行了一下就出Bug了.看了下y总的视频讲解是知道顺序有关系的.
原来的目的是让a点右边的点的左指针指向idx a点的右指针指向idx 如果先令r[a]=idx,那么下面的赋值在套娃的时候就不是原来的r[a]了(而是l[idx]=idx)
记录一下
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
int const maxn=100010;
int e[maxn],l[maxn],r[maxn],idx;
void init()
{
//0是左端点 1是右端点
r[0]=1;l[1]=0;
idx=2;
}
//a节点右边插入一个数x
void insert(int a,int x)
{
e[idx]=x;
l[idx]=a;r[idx]=r[a];
// r[a]=idx;l[r[a]]=idx++;
l[r[a]]=idx;r[a]=idx++;
}
void remove(int k)
{
r[l[k]]=r[k];
l[r[k]]=l[k];
}
int main(void)
{
int m;
scanf("%d",&m);
init();
while(m--)
{
char op[10];
int k,x,c;
scanf("%s",op);
if(op[0]=='L') scanf("%d",&x),insert(0,x);
else if(op[0]=='R') scanf("%d",&x),insert(l[1],x);
else if(op[0]=='D') scanf("%d",&k),remove(k+1);
else if(op[0]=='I'&&op[1]=='L') scanf("%d%d",&k,&c),insert(l[k+1],c);
else if(op[0]=='I'&&op[1]=='R') scanf("%d%d",&k,&c),insert(k+1,c);
}
for(int i=r[0];i!=1;i=r[i])
printf("%d ",e[i]);
printf("\n");
return 0;
}