90分,5wa了,用的插排加二分
查看原帖
90分,5wa了,用的插排加二分
1097140
meixintui楼主2023/12/23 16:10
#include<bits/stdc++.h>
using namespace std;

int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	vector<long long>v;
	v.reserve(20000);
  int n;cin>>n;
  v.push_back(0);
  for(int i=1;i<=n;i++)
  {
  	int a;cin>>a;
  	v.push_back(a);
	}
	sort(v.begin()+1,v.begin()+1+n);
	int m=1,cd=n;long long sum=0;
	while(cd>2)
	{
		long long a=v[m]+v[m+1];
		sum+=a;
		int l=m,r=n+n-cd;
		while(l<r)
		{
			int mid=(l+r)/2;
			if(v[mid]>=a)
			{
				r=mid;
			}
			else
			{
				l=mid+1;
			}
		}
		v.insert(v.begin()+l+1,a);
		m+=2;cd--;
	}
	sum+=v[m];
	sum+=v[m+1];
	cout<<sum;
  return 0;
}
2023/12/23 16:10
加载中...