MLE求助
查看原帖
MLE求助
183788
666czm楼主2020/12/5 15:59
#include<cstdio>
#include<iostream>
using namespace std;
const int maxn=2e5+10;
int psz,root;
int key[maxn],sz[maxn];
int ch[maxn][2];
void insert(int &u,int x){
	if(u==0){
		u=++psz;
		key[u]=x,sz[u]=1,ch[u][0]=ch[u][1]=0;
		return;
	}
	++sz[u];
	insert(ch[u][x>key[u]],x);
}
int rk(int u,int x){
	if(!u) return 0;
	if(x>key[u]) return sz[ch[u][0]]+1+rk(ch[u][1],x);
	return rk(ch[u][0],x);
}
int select(int u,int x){
	if(x==ch[u][0]) return key[u];
	if(x<ch[u][0]) return select(ch[u][0],x);
	return select(ch[u][1],x-sz[ch[u][0]]-1);
}

int main(){
	insert(root,-INT_MAX);
	insert(root,+INT_MAX);
	int n;
	cin>>n;
	while(n--){
		int op,x;
		cin>>op>>x;
		if(op==1){
			cout<<rk(root,x)<<endl;
		}else if(op==2){
			cout<<select(root,x)<<endl; 
		}else if(op==3){
			cout<<select(root,rk(root,x)-1)<<endl;
		}else if(op==4){
			cout<<select(root,rk(root,x+1))<<endl;
		}else{
			insert(root,x);
		}
	}
	return 0;
}
2020/12/5 15:59
加载中...