TLE求助
查看原帖
TLE求助
973480
封禁用户楼主2024/10/10 20:48
#include<iostream>
using namespace std;
struct Tree{
	int lchild=0,rchild=0;
	int data,num=0,father=0;
	int pm=1;
}tree[10001];
int top=0;
void insert(int x){
	tree[++top].data=x;
	int k=1;
	if(top>1){
		while(k<=top-1){
			int tdata=tree[k].data;
			if(x<tdata){
				if(tree[k].lchild==0){
					tree[k].lchild=top;
					tree[top].father=k;
					tree[k].num++;
					break;
				}
				k=tree[k].lchild;
			}else{
				tree[k].pm++;
				if(tree[k].rchild==0){
					tree[k].rchild=top;
					tree[top].father=k;
					break;
				}
				k=tree[k].rchild;
			}
		}
	}
	return;
}
int cpm(int x){
	int sear=1;
	while(1){
		if(tree[sear].data==x) break;
		else if(x<tree[sear].data) sear=tree[sear].lchild;
		else sear=tree[sear].rchild;
	}
	if(!sear) return 0;
	return tree[sear].pm;
}
int pmc(int x){
	int sear=1;
	while(1){
		int k;
		k=tree[sear].pm;
		if(x==k) break;
		else if(x<k) sear=tree[sear].rchild;
		else sear=tree[sear].lchild;
	}
	return tree[sear].data;
}
int pre(int x){
	int sear=1;
	while(1){
		if(tree[sear].data==x) break;
		else if(x<tree[sear].data) sear=tree[sear].lchild;
		else sear=tree[sear].rchild;
	}
	int t=tree[sear].lchild;
	if(t==0){
		if(tree[tree[tree[sear].father].rchild].data==tree[sear].data) return tree[tree[sear].father].data;
		else return -2147483647;
	}
	while(1){
		if(tree[t].rchild==0) break;
		t=tree[t].rchild;
	}
	return max(tree[tree[sear].father].data,tree[t].data);
}
int nxt(int x){
	int sear=1;
	while(1){
		if(tree[sear].data==x)
			break;
		else if(x<tree[sear].data) sear=tree[sear].lchild;
		else sear=tree[sear].rchild;
	}
	int t=tree[sear].rchild;
	if(t==0){
		if(tree[tree[tree[sear].father].lchild].data==tree[sear].data) return tree[tree[sear].father].data;
		else return 2147483647;
	}
	while(1){
		if(tree[t].lchild==0) break;
		t=tree[t].lchild;
	}
	if(tree[tree[tree[sear].father].lchild].data==tree[sear].data)
		return min(tree[tree[sear].father].data,tree[t].data);
	else 
		return tree[t].data;
}
int main(){
	int q;
	cin >> q;
	while(q--){
		int opt,x;
		cin >> opt >> x;
		if(opt==5) insert(x);
		else if(opt==1) cout << cpm(x) << endl;
		else if(opt==2) cout << pmc(x) << endl;
		else if(opt==3) cout << pre(x) << endl;
		else cout << nxt(x) << endl;
	}
	return 0;
}
2024/10/10 20:48
加载中...