双链表
int e[N],l[N],r[N],idx;
//l表示左边的点,r表示右边的点
//双链表的初始化
void init()
{
//0表示左端点,1表示右端点
r[0] = 1,l[1] = 0;
idx = 2;
}
//在下标是k的点的右边,插入x
void add(int k,int x)
{
e[idx] = x;
r[idx] = r[k];
l[idx] = k;
l[r[k]] = idx;
r[k] = idx;
idx++;
}
//如果要删去k左边的结点,只需add(l[k],x)即可
//删除第k个点
void remove(int k )
{
r[l[k]] = r[k];
l[r[k]] = l[k];
}