全RE?求助大佬!!!
查看原帖
全RE?求助大佬!!!
712994
ggcggc楼主2023/9/7 18:30
#include<iostream>
#define ri register int
using namespace std;
const int N=1e4+100,MAX=2147483647;
int q,op,x,c[N],tot,s[N],ok,f[N];
void find(ri rt,ri a){
	if(f[rt]==MAX) cout<<MAX<<endl;
	else if(s[f[rt]]==a) find(f[rt],a);
	else cout<<f[rt]<<endl;
}
struct wyx{
	int left,right;
}nodes[N];
inline void build(ri rt,ri a){
	if(tot==1){
		return;
	}
	if(a<s[rt]){
		if(nodes[rt].left==MAX){
			nodes[rt].left=tot;
			c[rt]++;
			f[nodes[rt].left]=rt;
			return;
		}
		build(nodes[rt].left,a);
		c[rt]++;
	}else{
		if(nodes[rt].right==MAX){
			nodes[rt].right=tot;
			c[tot]=c[rt]+1;
			f[nodes[rt].right]=rt;
			return;
		}
		c[nodes[rt].right]=c[rt]+1;
		build(nodes[rt].right,a);
	}
	return;
}
inline void serch_c(ri rt,ri a){
	if(a<s[rt]){
		if(nodes[rt].left==MAX){
			cout<<c[rt]+1<<endl;
			return;
		}
		serch_c(nodes[rt].left,a);
	}else if(a==s[rt]){
		cout<<c[rt]+1<<endl;
	}else{
		if(nodes[rt].right==MAX){
			cout<<c[rt]+2<<endl;
			return;
		}
		c[nodes[rt].right]=c[rt]+1;
		serch_c(nodes[rt].right,a);
	}
	return;
}
inline void serchc_(ri rt,ri a){
	if(a<c[rt]+1){
		serchc_(nodes[rt].left,a);
	}else if(a==c[rt]+1){
		cout<<s[rt]<<endl;
	}else{
		int p=nodes[rt].right;
		if(nodes[p].left!=MAX)c[nodes[rt].right]=c[rt]+c[nodes[p].left]+1;
		else c[nodes[rt].right]=c[rt]+1;
		serchc_(nodes[rt].right,a);
	}
	return;
}
inline void serch_l(ri rt,ri a){
	if(a<s[rt]){
		if(nodes[rt].left==MAX){
			cout<<-MAX<<endl;
			return;
		}
		serch_l(nodes[rt].left,a);
	}else if(a==s[rt]){
		ok=true;
		if(nodes[rt].left==MAX){
			if(f[rt]==MAX) cout<<-MAX<<endl;
			else cout<<s[f[rt]]<<endl;
			return;
		}
		serch_l(nodes[rt].left,a);
	}else{
		if(nodes[rt].right==MAX){
			if(ok==false) cout<<-MAX<<endl;
			else cout<<s[rt]<<endl;
			return;
		}
		serch_l(nodes[rt].right,a);
	}
	return;
}
inline void serch_r(ri rt,ri a){
	if(a<s[rt]){
		if(nodes[rt].left==MAX){
			if(ok==false) cout<<MAX<<endl;
			else cout<<s[rt]<<endl;
			return;
		}
		serch_r(nodes[rt].left,a);
	}else if(a==s[rt]){
		ok=true;
		if(nodes[rt].right==MAX){
			if(f[rt]==MAX) cout<<MAX<<endl;
			else if(s[f[rt]]==a) find(f[rt],a);
			else cout<<s[f[rt]]<<endl;
			return;
		}
		serch_r(nodes[rt].right,a);
	}else{
		if(nodes[rt].right==MAX){
			cout<<MAX<<endl;
			return;
		}
		serch_r(nodes[rt].right,a);
	}
	return;
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	for(ri i=1;i<=N-99;i++){
		nodes[i].left=MAX;
		nodes[i].right=MAX;
		f[i]=MAX;
	}
	cin>>q;
	while(q--){
		cin>>op>>x;
		if(op==1){
			serch_c(1,x);
		}else if(op==2){
			serchc_(1,x);
		}else if(op==3){
			ok=false;
			serch_l(1,x);
		}else if(op==4){
			ok=false;
			serch_r(1,x);
		}else{
			s[++tot]=x;
			build(1,x);
		}
	}
	return 0;
} 

初步判定可能是serchc_()函数的问题(求排名为x的数) (数组改为map仍然RE)

2023/9/7 18:30
加载中...