#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<iostream>
using namespace std;
long long arr[100000100] = { 0 };
int com(const void *a, const void *b)
{
int *pa = (int *)a;
int *pb = (int *)b;
return *pa - *pb;
}
int main()
{
int n, m;
cin >> n >> m;
for (int i = 0; i < n; i++)
cin >> arr[i];
qsort(arr, n, sizeof(long long ), com);
int l = 0, r = n - 1;
int h = 0;
while (l < r)
{
int mid = (l + r) / 2;
long long sum = 0;
int kan = arr[mid];
int k = mid+1;
while (k < n)
{
sum += (arr[k]-kan);
k++;
}
if (sum > m)
{
while (sum > m&&kan < arr[mid + 1])
{
kan++;
sum -= (n - mid-1);
}
}
else
{
while (sum<m&&kan>arr[mid - 1])
{
sum += (n - mid-1);
kan--;
}
}
h = kan;
if (kan >= arr[mid + 1]&&(sum- (n - mid))>=m)
{
l = mid + 1;
}
else if (kan <= arr[mid - 1])
r = mid;
else
break;
}
cout << h;
return 0;
}'''
感觉没有人的解法和我相似,为什么过不了