30分WA,只A了后2个,求调!
查看原帖
30分WA,只A了后2个,求调!
644112
Sinktank楼主2023/12/30 17:40
#include<bits/stdc++.h>
using namespace std;
int q,l[10010],r[10010],v[10010],cnt[10010],fa[10010],len;
void add(int val){
	int pos=1;
	if(len==0){
		cnt[++len]++,v[len]=val;
		return;
	}
	while(1){
		if(v[pos]==val){
			cnt[pos]++;
			return;
		}
		if(val>v[pos]){//右
			if(r[pos]==0){
				v[++len]=val,r[pos]=len,cnt[r[pos]]++,fa[r[pos]]=pos;
				return;
			}else{
				pos=r[pos];
			}
		}else{//左
			if(l[pos]==0){
				v[++len]=val,l[pos]=len,cnt[l[pos]]++,fa[l[pos]]=pos;
				return;
			}else{
				pos=l[pos];
			}
		}
	}
}
int dfs(int sum,int pos,int val){
	if(val>v[pos]){//右
		if(r[pos]==0) return sum+1;
		return dfs(sum+cnt[pos],r[pos],val);
	}else if(val<v[pos]){//左
		if(l[pos]==0) return sum+1;
		return dfs(sum+cnt[pos],l[pos],val);
	}else{
		return sum+1;
	}
}
int sum;
bool f;
void fin(int pos,int num){//开始编号,排名
	if(pos==0) return;
	fin(l[pos],num);
	if(f) return;
	sum+=cnt[pos];
	if(sum>=num){
		cout<<v[pos]<<endl;
		f=1;
		return;
	}
	fin(r[pos],num);
	if(f) return;
}
int main(){
	cin>>q;
	for(int i=1;i<=q;i++){
		int u,val;
		cin>>u>>val;
		if(u==1){
			cout<<dfs(0,1,val)<<endl;
		}else if(u==2){
			sum=f=0;
			fin(1,val);
		}else if(u==3){//小于中的最大
			int pos=dfs(0,1,val);
			if(l[pos]!=0){
				int lpos=l[pos];
				while(1){
					if(r[lpos]==0) break;
					lpos=r[lpos];
				}
				cout<<v[lpos]<<endl;
			}else{
				int tpos=pos;
				bool f=0;
				while(1){
					if(fa[tpos]==0) break;
					if(v[fa[tpos]]<val){
						cout<<v[fa[tpos]]<<endl;
						f=1;
						break;
					}
					tpos=fa[tpos];
				}
				if(!f){
					cout<<"-2147483647\n";
				}
			}
		}else if(u==4){//大于中的最小
			int pos=dfs(0,1,val);
			if(r[pos]!=0){
				int rpos=r[pos];
				while(1){
					if(l[rpos]==0) break;
					rpos=l[rpos];
				}
				cout<<v[rpos]<<endl;
			}else{
				int tpos=pos;
				bool f=0;
				while(1){
					if(fa[tpos]==0) break;
					if(v[fa[tpos]]>val){
						cout<<v[fa[tpos]]<<endl;
						f=1;
						break;
					}
					tpos=fa[tpos];
				}
				if(!f){
					cout<<"2147483647\n";
				}
			}
		}else if(u==5){
			add(val);
		}
	}
}
2023/12/30 17:40
加载中...