我为啥错了
查看原帖
我为啥错了
559881
ranzhenrui楼主2022/8/15 15:44
#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[100005];
int sum[100005];
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	sort(a+1,a+n+1);
	for(int i=1;i<=n;i++)
	{
		sum[i]=sum[i-1]+a[i];
	}
	long long l=0,r=2*n,ans,cnt,res;
	while(l<r)
	{
		long long mid=(l+r)/2;
		res=cnt=0;
		for(int i=1;i<=n;i++)
		{
			long long p=lower_bound(a+1,a+1+n,mid-a[i])-a;
			cnt+=n-p+1;
			res+=sum[n]-sum[p-1]+a[i]*(n-p+1);
		}
		if(cnt>=m) l=mid+1;
		else r=mid-1;
	}
	cout<<res-(cnt-m)*l;
	return 0;
}
2022/8/15 15:44
加载中...