30分求助
查看原帖
30分求助
602932
NumberTrart楼主2024/1/28 19:39
#include <algorithm>//STL 通用算法
#include <iostream>//数据流输入/输出
using namespace std;
int cnt;
bool rooted;
struct node
{
	int val,cnt;
	int size;
	int l,r,f;
} a[1005];
void debug()
{
	for(int i=1;i<=cnt;i++)
	{
		cout<<"#"<<i<<" val="<<a[i].val<<" cnt="<<a[i].cnt<<" size="<<a[i].size<<" l="<<a[i].l<<" r="<<a[i].r<<" f="<<a[i].f<<'\n';
	}
}
int main(){
	int n;
	cin>>n;
	while(n--)
	{
		int op,x;
		cin>>op>>x;
		switch(op)
		{
			case 1:{
				int p=1,ans=0;
				while(a[p].val!=x&&p)
				{
					//cout<<"p="<<p<<" ans="<<ans<<'\n';
					if(a[p].val>x) p=a[p].l;
					else
					{
						ans+=a[a[p].l].size+a[p].cnt;
						p=a[p].r;
					}
				}
				//cout<<"p ends at:"<<p<<",a[p].l="<<a[p].l<<",lsize="<<a[a[p].l].size<<",ans now is:"<<ans<<'\n';
				if(p)//{cout<<"#\n";break;}
					ans+=a[a[p].l].size;
				//cout<<"ans ends at:"<<ans<<'\n';
				cout<<ans+1<<'\n';
				break;
			}
			case 2:{
				int p=1,ans=0;
				while(p)
				{
					if(x<=a[a[p].l].size)
					{
						p=a[p].l;
					}
					else if(x<=a[a[p].l].size+a[p].cnt)
					{
						ans=a[p].val;
						break;
					}
					else
					{
						x-=a[a[p].l].size+a[p].cnt;
						p=a[p].r;
					}
				}
				if(!p){cout<<"@\n";break;}
				cout<<ans<<'\n';
				break;
			}
			case 3:{
				int p=1,ans=-2147483647;
				while(p)
				{
					if(a[p].val<x) ans=max(ans,a[p].val),p=a[p].r;
					else p=a[p].l;
				}
				cout<<ans<<'\n';
				break;
			}
			case 4:{
				int p=1,ans=2147483647;
				while(p)
				{
					if(a[p].val>x) ans=min(ans,a[p].val),p=a[p].l;
					else p=a[p].r;
				}
				cout<<ans<<'\n';
				break;
			}
			case 5:{
				if(!rooted)
				{
					rooted=true;
					a[1].val=x;
					a[1].cnt=1;
					a[1].size=1;
					cnt=1;
				}
				else
				{
					cnt++;
					a[cnt].size=1;
					a[cnt].cnt=1;
					a[cnt].val=x;
					int p=1;
					while(a[p].val!=x)
					{
						a[p].size++;
						if(a[p].val<x){
							if(!a[p].r)
							{
								a[p].r=cnt;
								a[cnt].f=p;
								break;
							}
							else p=a[p].r;
						}
						else
						{
							if(!a[p].l)
							{
								a[p].l=cnt;
								a[cnt].f=p;
								break;
							}
							else p=a[p].l;
						}
					}
					if(a[p].val==x) a[p].cnt++,cnt--;
					break;
				}
			}
		}//switch
		//debug();
	}
	return 0;
}

WA

2024/1/28 19:39
加载中...