rt,代码如下:
#include<bits/stdc++.h>
using namespace std;
struct Node{
int val;
Node *pre,*next;
Node(){
pre=nullptr;
next=nullptr;
}
}node[100005];
Node *p=node,*head=++p,*tail=head;
void push_front(int d){
Node *np=++p;
head->val=d;
np->next=head;
head->pre=np;
head=np;
}
void push_back(int d){
Node *np=++p;
np->val=d;
tail->next=np;
np->pre=tail;
tail=np;
}
void insert(Node *t,int d){
Node *np=++p;
np->val=d;
t->pre->next=np;
np->pre=t->pre;
np->next=t;
t->pre=np;
}
void erase(Node *t){
if(t==tail){
t->pre->next=nullptr;
tail=t->pre;
}
else{
t->pre->next=t->next;
t->next->pre=t->pre;
}
}
void show(){
for(Node *i=head->next;i!=nullptr;i=i->next){
cout<<i->val<<' ';
}
cout<<"\n";
}
int main(){
int n,m;
cin>>n;
push_back(1);
for(int i=2;i<=n;i++){
int k,t;
cin>>k>>t;
Node *np=head;
if(t==0){
if(head->val==k) push_front(i);
else{
while(np->val!=k) np=np->next;
insert(np,i);
}
}
else{
if(tail->val==k) push_back(i);
else{
while(np->pre->val!=k) np=np->next;
insert(np,i);
}
}
show();
}
cin>>m;
for(int i=0;i<m;i++){
int t;
cin>>t;
Node *np=head;
while(np->val!=t && np!=tail) np=np->next;
if(np->val==t) erase(np);
}
show();
return 0;
}