全WA求助
查看原帖
全WA求助
1188358
Yosuga_sora楼主2024/3/20 11:16
#include <stdio.h>
#define max(a,b) (((a)>(b))?(a):(b))
#define min(a,b) (((a)<(b))?(a):(b))
int q,op,x,cont;
struct tree{
	int val;
	int left,right;
	int cnt;
	int size;
}a[10010];
void insert(int root,int x){
	if(a[root].val==0){
		cont++;
		a[cont].val=x;
		a[cont].cnt=a[cont].size=1;
		return ;
	}
	a[root].size++;
	if(x==a[root].val){
		a[root].cnt++;
		return ;
	}
	if(x<a[root].val){
		if(a[root].left!=0){
			insert(a[root].left,x);
		}
		else{
			cont++;
			a[cont].val=x;
			a[cont].cnt=a[cont].size=1;
			a[root].left=cont;
		}
	}
	if(x>a[root].val){
		if(a[root].right!=0){
			insert(a[root].right,x);
		}
		else{
			cont++;
			a[cont].val=x;
			a[cont].cnt=a[cont].size=1;
			a[root].right=cont;
		}
	}	
}
int search_qian(int root,int x,int ans){
	if(a[root].val>=x){
		if(a[root].left!=0){
			return ans=search_qian(a[root].left,x,ans);
		}
		else{
			return ans;
		}	
	}
	else{
		ans=max(ans,a[root].val);
		if(a[root].right!=0){
			return ans=search_qian(a[root].right,x,ans);
		}
		else{
			return a[root].val;
		}
	}
	return ans;
}
int search_hou(int root,int x,int ans){
	if(a[root].val<=x){
		if(a[root].right!=0){
			return ans=search_hou(a[root].right,x,ans);
		}
		else{
			return ans;
		}
	}
	else{
		ans=min(ans,a[root].val);
		if(a[root].left!=0){
			return ans=search_hou(a[root].left,x,ans);
		}
		else{
			return a[root].val;
		}
	}
	return ans;
}
int search_rate(int root,int x){
	if(root==0)return 1;
	else if(a[root].val==x){
		return a[a[root].left].size+1;
	}
	else if(a[root].val<x){
		return search_rate(a[root].right,x)+a[a[root].left].size+a[root].cnt;
	}
	else{
		return search_rate(a[root].left,x);	
	}
}
int search(int root,int rate){
	if(root==0)return 2147483647;
	else if(a[a[root].left].size>=rate){	
		return search(a[root].left,rate);	
	}
	else if(a[a[root].left].size+a[root].cnt>=rate){
		return a[root].val;
	}
	else{
		return search(a[root].right,rate-a[a[root].left].size-a[root].cnt);	
	}
}
int main(){
	scanf("%d",&q);
	while(q--){
		scanf("%d%d",&op,&x);
		if(op==1)printf("%d\n",search_rate(1,x));
		else if(op==2)printf("%d\n",search(1,x));
		else if(op==3)printf("%d\n",search_qian(1,x,-2147483647));
		else if(op==4)printf("%d\n",search_hou(1,x,2147483647));
		else if(op==5)insert(1,x);
	}
	return 0;
}
2024/3/20 11:16
加载中...