全WA求助,感谢大佬
查看原帖
全WA求助,感谢大佬
557781
ruojiyz楼主2023/4/23 10:16
#include<bits/stdc++.h>
using namespace std;
const int N=10005;
int q,op,v,c;
int val[N],ls[N],rs[N],cnt[N],siz[N];

int queryrink(int x)
{
	if(x==0) return 0;
	if(v==val[x]) return siz[ls[x]]+1;
	if(v>val[x]) return cnt[x]+siz[ls[x]]+queryrink(rs[x]);
	if(v<val[x]) return queryrink(ls[x]);
}
int querykth(int x)
{
	if(v>siz[ls[x]]) 
	{
		v-=siz[ls[x]];
		if(v<=cnt[x]) return val[x];
		else 
		{
			v-=cnt[x];
			querykth(rs[x]);
		}
	}
	else querykth(ls[x]);
}
int queryfr(int x)
{
	if(cnt[x]==0) return -2147483647;
	if(v<=val[x]) return queryfr(ls[x]);
	return max(val[x],queryfr(rs[x]));
}
int queryta(int x)
{
	if(cnt[x]==0) return 2147483647;
	if(v>=val[x]) return queryta(rs[x]);
	return min(val[x],queryta(ls[x]));
}
void insert(int x)
{
	siz[x]++;
	if(v==val[x])
	{
		cnt[x]++;
		return;
	}
	if(v<val[x])
	{
		if(ls[x]==0)
		{
			val[++c]=v;
			siz[c]=1;
			cnt[c]=1;
			ls[x]=c;
			return;
		}
		else insert(ls[x]);
	}
	else
	{
		if(rs[x]==0)
		{
			val[++c]=v;
			siz[c]=1;
			cnt[c]=1;
			rs[x]=c;
			return;
		}
		else insert(rs[x]);
	}
}

int main(){
	cin >> q;
	for(int i=1;i<=q;i++)
	{
		cin >> op >> v;
		if(op==1) cout << queryrink(1) << "\n";
		if(op==2) cout << querykth(1) << "\n";
		if(op==3) cout << queryfr(1) << "\n";
		if(op==4) cout << queryta(1) << "\n";
		if(op==5) 
		{
			if(c==0) 
			{
				val[1]=v;
				cnt[1]=1;
				siz[1]=1;
				c++;
			}
			else insert(1);
		}
	}
	return 0;
}

2023/4/23 10:16
加载中...