求调
查看原帖
求调
761137
Double_Light楼主2024/12/21 14:23

只过了 Hack

#include<iostream>
using namespace std;
int q;
struct node{
	int x,lson,rson,lsiz,rsiz;
}a[10005];
int tot=1;
int Rank(int x,int v){
	if(a[x].x>v&&a[x].lson)return Rank(a[x].lson,v);
	else if(a[x].x>v)return 1;
	else if(a[x].x<v&&a[x].rson)return a[x].lsiz+1+Rank(a[x].rson,v);
	else if(a[x].x<v)return a[x].lsiz+2;
	return a[x].lsiz+1;
}
int query(int x,int v){
	if(v==0)return -2147483647;
	if(v>=a[x].lsiz+a[x].rsiz+3)return 2147483647;
	if(v<=a[x].lsiz)return query(a[x].lson,v);
	if(v>a[x].lsiz+1)return query(a[x].rson,v-a[x].lsiz-1);
	return a[x].x;
}
void insert(int x,int v){
	if(a[x].x>v){
		a[x].lsiz++;
		if(a[x].lson)insert(a[x].lson,v);
		else{
			a[++tot]={v,0,0,0,0};
			a[x].lson=tot;
		}
	}
	if(a[x].x<v){
		a[x].rsiz++;
		if(a[x].rson)insert(a[x].rson,v);
		else{
			a[++tot]={v,0,0,0,0};
			a[x].rson=tot;
		}
	}
}
int f;
int main(){
	cin>>q;
	while(q--){
		int opt,x;
		cin>>opt>>x;
		if(opt==1)cout<<Rank(1,x)<<'\n';
		if(opt==2)cout<<query(1,x)<<'\n';
		if(opt==3){
			int y=Rank(1,x);
			cout<<query(1,y-1)<<'\n';
		}
		if(opt==4){
			int y=Rank(1,x);
			cout<<query(1,y+1)<<'\n';
		}
		if(opt==5){
			if(!f)a[1].x=x,f=1;
			else insert(1,x);
		}
	}
	return 0;
}
2024/12/21 14:23
加载中...