为什么全tle,没看懂求调,hack过了
查看原帖
为什么全tle,没看懂求调,hack过了
1112330
hczyy楼主2024/8/5 18:54
#include<bits/stdc++.h>
using namespace std;
typedef int LL;
const LL MAXN=1e5+10;
LL len;
struct node{
	LL data,size,num;
	LL lch,rch,fa;
	node(){
		fa=data=size=lch=rch=num=0;
	}
}tree[MAXN];
bool bl;

void init(LL l,LL dat,LL fa){
	tree[l].num=1;
	tree[l].data=dat;
	if(l!=1) tree[l].fa=fa;
	while(l>1){
		if(tree[l].fa!=0) tree[tree[l].fa].size++;
		l=tree[l].fa;
	}
	return;
}

LL search_num(LL id,LL x){
	if(tree[id].data==x||id==0){
		return 0;
	}
	if(tree[id].data>x){
		return search_num(tree[id].lch,x);
	}
	else{
		return search_num(tree[id].rch,x)+tree[tree[id].lch].size+tree[tree[id].lch].num+tree[id].num;
	}
}

void search_rank(LL i ,LL x,LL minl){
	LL rt=tree[tree[i].lch].num+tree[tree[i].lch].size+minl;
	if(rt>x){
		search_rank(tree[i].lch,x,0);
	}
	else{
		if(rt==x-1) {
			printf("%d\n",tree[i].data);
			return;
		}
		search_rank(tree[i].rch,x,rt+tree[i].num);
	}
}

void pre_search(LL id,LL x,LL maxl){
	if(id==0){
		printf("%d\n",maxl);
		return;
	}
	if(tree[id].data>=x){
		pre_search(tree[id].lch,x,maxl);
	}
	else{
		maxl=max(tree[id].data,maxl);
		pre_search(tree[id].rch,x,maxl);
	}
}

void post_search(LL id,LL x,LL minl){
	if(id==0){
		printf("%d\n",minl);
		return;
	}
	if(tree[id].data>x){
		minl=min(tree[id].data,minl);
		post_search(tree[id].lch,x,minl);
		return;
	}
	else{
		post_search(tree[id].rch,x,minl);
		return;
	}
}

void insert(LL id,LL x){
	if(tree[id].data>x){
		if(tree[id].lch==0){
			tree[id].lch=++len;
			init(len,x,id);
		}
		insert(tree[id].lch,x);
	}
	if(tree[id].data<x){
		if(tree[id].rch==0){	
			tree[id].rch=++len;
			init(len,x,id);
		}
		insert(tree[id].rch,x);
	}
}

int main(){
	LL q;
	cin>>q;
	for(LL i=1;i<=q;i++){
		LL op,x;
		cin>>op>>x;
		switch(op){
			case 1:
				printf("%d\n",search_num(1,x)+1);
				break;
			case 2:
				search_rank(1,x,0);
				break;
			case 3:
				pre_search(1,x,-2147483647);
				break;
			case 4: 
				post_search(1,x,2147483647);
				break;
			case 5:
				if(!bl)	insert(0,x);
				bl=true;
				insert(1,x);
				break;
		}
	}
	return 0;
} 
2024/8/5 18:54
加载中...