题目描述
一个学校里老师要将班上N个同学排成一列,同学被编号为1~N,他采取如下的方法:
1.先将1号同学安排进队列,这时队列中只有他一个人;
2.2~N号同学依次入列,编号为i的同学入列方式为:老师指定编号为i的同学站在编号为1~i -1中某位同学(即之前已经入列的同学)的左边或右边;
3.从队列中去掉M(M
type node=record
id,pre,suc:longint;
end;
var a:array[0..100001]of node;
v:array[0..100001]of longint;
n,m,h,t,i,x,z:longint;
begin
readln(n);
a[1].id:=1;
a[1].pre:=0;h:=1;
a[1].suc:=0;t:=1;
for i:=2 to n do
begin
readln(x,z);
a[i].id:=i;
case z of
0:begin
if a[x].pre=0 then
begin
a[i].pre:=0;
a[i].suc:=a[x].id;
a[x].pre:=a[i].id;
h:=i;
end else
begin
a[i].pre:=a[a[x].pre].id;
a[a[x].pre].suc:=a[i].id;
a[i].suc:=a[x].id;
a[x].pre:=a[i].id;
end;
end;
1:begin
if a[x].suc=0 then
begin
a[i].suc:=0;
a[i].pre:=a[x].id;
a[x].suc:=a[i].id;
end else
begin
a[i].suc:=a[a[x].suc].id;
a[a[x].suc].pre:=a[i].id;
a[i].pre:=a[x].id;
a[x].suc:=a[i].id;
end;
end;
end;
end;t:=h;z:=0;
while t<>0 do
begin
inc(z);
v[t]:=z;
t:=a[t].suc;
end;
readln(m);
for i:=1 to m do
begin
readln(x);
if v[x]=0 then continue;
if a[x].pre=0 then
begin a[a[x].suc].pre:=0;h:=a[x].suc;end
else if a[x].suc=0 then
a[a[x].pre].suc:=0 else
begin a[a[x].pre].suc:=a[x].suc;
a[a[x].suc].pre:=a[x].pre;end;
v[x]:=0;
end;t:=h;
while t<>0 do
begin
write(t,' ');
t:=a[t].suc;
end;
end.