下面的代码40分,我把remove函数改成在结构体里面加一个变量标记是否删除就AC了,写的remove函数在数据量较大的时候会有删不掉的数据
想知道为什么我的remove函数会有删不掉的数,我自己捏的数据测出来的删除都是正常的
#include<bits/stdc++.h>
using namespace std;
struct tem{
int l,r;
}o[100010];
void radd(int x, int y){ //把y同学插入到x同学右边
if(o[x].r!=-1){ o[o[x].r].l=y;}
o[y].r=o[x].r;
o[x].r=y;
o[y].l=x;
}
void ladd(int x, int y){ //把y插入到x左边
if(o[x].l!=-1){ o[o[x].l].r=y;}
o[y].l=o[x].l;
o[x].l=y;
o[y].r=x;
}
void remove(int x){
o[o[x].r].l=o[x].l;
o[o[x].l].r=o[x].r;
}
int main(){
int n, m, cnt=2, t=1;
cin >> n;
o[1].l=-1; o[1].r=-1; //队伍边界设置为-1
n--;
while(n--){
int k, p;
cin >> k >> p;
if(p) radd(k,cnt);
else ladd(k,cnt);
if(k==t && p==0) t=cnt;
cnt++;
}cin >> m;
while(m--){
int x;
cin >> x;
remove(x);
if(x==t) t=o[x].r;
}for(int i=t; i!=-1; i=o[i].r){
cout << i << " ";
}cout << endl;
}