救救我吧
查看原帖
救救我吧
377434
tian_jun_cheng楼主2022/2/17 19:15
#include<bits/stdc++.h>
using namespace std;
const int maxn=32768;
int root,nn;
int lef[maxn],rig[maxn],val[maxn],num[maxn],siz[maxn];
bool vis[maxn];
void add(int &r,int x)
{
	if(r==0)
	{
		r=++nn;
		val[nn]=x;
		num[nn]=1;
	}
	else if(val[r]==x)
		num[r]++;
	else if(x<val[r])
		add(lef[r],x);
	else
		add(rig[r],x);
	siz[r]=siz[lef[r]]+siz[rig[r]]+num[r];
}
int rnk(int r,int x)
{
	if(r==0)
		return 1;
	if(x<val[r])
		return rnk(lef[r],x);
	if(x==val[r])
		return siz[lef[r]]+1;
	return siz[lef[r]]+num[r]+rnk(rig[r],x);
}
int kth(int r,int k)
{
	if(k<=siz[lef[r]])
		return kth(lef[r],k);
	k-=siz[lef[r]];
	if(k<=num[r])
		return val[r];
	k-=num[r];
	return kth(rig[r],k);
}
int pre_e(int r,int x)
{
	return kth(r,rnk(r,x)-1);
}
int nex_e(int r,int x)
{
	return kth(r,rnk(r,x+1));
}
int main()
{
	int n;
	scanf("%d",&n);
	int x;
	scanf("%d",&x);
	int ans=x;
	vis[x]=true;
	add(root,x);
	n--;
	while(n--)
	{
		int xx;
		scanf("%d",&xx);
		if(vis[xx]==false)
		{
			//cout<<"in"<<endl;
			ans+=min(abs(pre_e(root,xx)-xx),abs(pre_e(root,xx)-nn));
			cout<<p<<" "<<ne<<" ";
			vis[xx]=true;
		}
		add(root,xx);
		//cout<<ans<<endl;
	}
	cout<<ans;
	return 0;
}

69行为啥没有输出啊

2022/2/17 19:15
加载中...