只过了hack,求调
查看原帖
只过了hack,求调
1087173
guer_loser_lcz楼主2024/11/10 16:51
#include<bits/stdc++.h>
using namespace std;
int n,op,x,cnt;
struct le{
	int l,r,v,size;
}a[100100];
int find(int x,int id){
	if(a[id].v==x)return id;
	if(a[id].v>x){
		if(a[id].l==0)return id;
		return find(x,a[id].l);
	}else{
		if(a[id].r==0)return id;
		return find(x,a[id].r);
	}
}
int g1(int x,int id){
	if(a[id].v==0)return 0;
	if(a[id].v==x)return 1;
	if(x>a[id].v){
		return g1(x,a[id].r)+a[a[id].l].size+1;
	}else{
		return g1(x,a[id].l);
	}
}
int g2(int y,int id){
	if(y+a[a[id].l].size+1==x)return a[id].v;
	if(y+a[a[id].l].size+1<x){
		return g2(y+a[a[id].l].size+1,a[id].r);
	}else return g2(y,a[id].l);
}
int g3(int x,int id,int ans){
	if(a[id].v>=x){
		if(a[id].l==0)return ans;
		else return g3(x,a[id].l,ans);
	}else{
		if(a[id].r==0)return (a[id].v<x)?a[id].v:ans;
		return g3(x,a[id].r,a[id].v);
	}
}
int g4(int x,int id,int ans){
	if(a[id].v<=x){
		if(a[id].r==0)return ans;
		else return g4(x,a[id].r,ans);
	}else{
		if(a[id].l==0)return (a[id].v>x)?a[id].v:ans;
		return g4(x,a[id].l,a[id].v);
	}
}
void put(int x,int id){
	if(a[id].v==x)return;
	a[id].size++;
	if(a[id].v>x){
		if(a[id].l==0){
			a[id].l=cnt;
			return;
		}
		put(x,a[id].l);
	}else{
		if(a[id].r==0){
			a[id].r=cnt;
			return;
		}
		put(x,a[id].r);
	}
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>op>>x;
		if(op==1){
			cout<<g1(x,1)<<endl;
		}else if(op==2){
			cout<<g2(0,1)<<endl;
		}else if(op==3){
			cout<<g3(x,1,-2147483647)<<endl;
		}else if(op==4){
			cout<<g4(x,1,2147483647)<<endl;
		}else{
			a[++cnt].v=x;
			a[cnt].size=1;
			put(x,1);
		}
	}
	return 0;
}
2024/11/10 16:51
加载中...