求助,不开O2全MLE,开O2全TLE(悬赏小号1关注)
查看原帖
求助,不开O2全MLE,开O2全TLE(悬赏小号1关注)
545161
_空白_楼主2023/2/27 19:47

代码:

#include<bits/stdc++.h>
using namespace std;
int val[10010],cnt[10010];
int siz[10010];
int lc[10010],rc[10010];
int id[10010];
int n;
inline void insert(int k,int v)
{
	if(n==0)
	{
		n++;
		val[n]=v;
		cnt[n]=1;
		siz[n]=1; 
		lc[n]=0;
		rc[n]=0;
		return;
	}
	if(!k)
	{
		n++;
		val[n]=v;
		cnt[n]=1;
		siz[n]=1; 
		lc[n]=0;
		rc[n]=0;
		return;
	}
	siz[k]++;
	if(val[k]==v)
	{
		cnt[k]++;
		return;
	}
	if(val[k]>v)
	{
		insert(lc[k],v);
		if(!lc[k])
			lc[k]=n;
	}
	if(val[k]<v)
	{
		insert(rc[k],v);
		if(!rc[k])
			rc[k]=n;
	}
		
}
inline int qrnk(int k,int v)
{
	if(val[k]==v)
		return siz[lc[k]]+1;
	if(val[k]>v)
		return qrnk(lc[k],v);
	if(val[k]<v)
		return siz[lc[k]]+cnt[k]+qrnk(rc[k],v);
}
inline int qkth(int k,int v)
{
	if(siz[lc[k]]>=v)
		return qkth(lc[k],v);
	if(siz[lc[k]]<v-cnt[k]) 
		return qkth(rc[k],v-siz[lc[k]]-cnt[k]);
	return val[k];
}
inline int zd(int k)
{
	if(rc[k])
		return zd(rc[k]);
	return val[k];
}
inline int zx(int k)
{
	if(lc[k])
		return zx(lc[k]);
	return val[k];
}
int main()
{
	int q,mi=1000000000,ma=0;
	cin>>q;
	for(int i=1;i<=q;i++)
	{
		int op,x;
		cin>>op>>x;
		if(op==1)
			cout<<qrnk(1,x)<<endl;
		else if(op==2)
			cout<<qkth(1,x)<<endl;
		else if(op==3)
			if(mi!=x)
				cout<<qkth(1,qrnk(1,x)-1)<<endl;
			else
				cout<<-2147483647<<endl;
		else if(op==4)
			if(ma!=x)
				cout<<qkth(1,qrnk(1,x)+1)<<endl;
			else
				cout<<2147483647<<endl;
		else
			insert(1,x),mi=min(mi,x),ma=max(ma,x);
	}
	return 0;
}
2023/2/27 19:47
加载中...