20分set做法,求大佬帮忙看看错在哪里了orz
查看原帖
20分set做法,求大佬帮忙看看错在哪里了orz
234783
conprour楼主2021/1/28 15:25
#include<bits/stdc++.h>
using namespace std;
const int M = 32767;
const int N = 1e6+6;
int a[M],n;
int tong[N];
set<int> s;
//set<int>::iterator tmp;
long long ans;
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		tong[a[i]]++;
		s.insert(a[i]);
		if(i==1) ans+=a[i];
		if(i==2) ans+=abs(a[1]-a[2]);
		if(i>2)
		{ 
			set<int>::iterator it1=s.upper_bound(a[i]);			
			int min1=abs(*it1-a[i]);
			set<int>::iterator it2=s.lower_bound(a[i]);
			it2--;
			int min2=abs(a[i]-*it2);
			if(tong[a[i]]>1) continue;
			if(it1==s.end()) {ans+=min2;continue;} 
		//	printf("min1=%d min2=%d\n",min1,min2);		
			ans+=min(min1,min2);
		//	printf("ans=%lld\n",ans);
		}
	}
	printf("%lld",ans);
	return 0;
}

2021/1/28 15:25
加载中...