萌新求助
查看原帖
萌新求助
378346
expnoi楼主2021/11/11 19:53
#include<bits/stdc++.h>
using namespace std;
int Left[1000001],Right[1000001],n,Rank[2000001],rk[2000001],a[100001],b[100001];
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		b[i]=a[i]+1000000;
	}
	sort(a+1,a+n+1);
	for(int i=1;i<=n;i++)
	{
		Left[i]=i-1;
		Right[i]=i+1;
		if(!Rank[a[i]+1000000])
		Rank[a[i]+=1000000]=i,rk[a[i]]=1;
		else
		{
			rk[a[i]+=1000000]++;
		}
	}
	Right[n]=0;
	int ans=0;
	for(int i=n;i>=1;i--)
	{
		if(rk[b[i]]>=2)
		{
			rk[b[i]]--;
			continue;
		}
		else
		{
			int id=Rank[b[i]];
			rk[b[id]]=0;
			int c1=abs(a[id]-a[Left[id]]),c2=abs(a[id]-a[Right[id]]);
			if(c1<c2)
			{
				ans+=c1;
			}
			else
			{
				ans+=c2;
			}
			Left[Right[id]]=Left[b[id]];
			Right[Left[id]]=Right[b[id]];
		}
	}
	printf("%d\n",ans);
}
2021/11/11 19:53
加载中...