大佬们帮忙看看问题
查看原帖
大佬们帮忙看看问题
831229
_Sykes_楼主2024/7/31 01:13

下面的代码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;
}
2024/7/31 01:13
加载中...