第一段(一直3 9 10wa)
#include<stdio.h>
#include<iostream>
#include <algorithm>
using namespace std;
long long a[1000010];
int counting(long long a[],long long k,long long n){
long long h=0;
for(long long i=0;i<n;i++){
if(a[i]>k){
h=h+(a[i]-k);
}
}
return h;
}
int bs(long long a[],long long m,long long n){
long long l=a[0],r=a[n-1],x;
while(l<=r){
long long mid = (l+r)/2;
if(counting(a,mid,n)<m){
r=mid-1;
}
else {
x=mid;
l=mid+1;
}
}
return x;
}
int main(){
long long n,m,ans;
scanf("%lld%lld",&n,&m);
for(long long i=0;i<n;i++){
scanf("%lld",&a[i]);
}
sort(a,a+n);
ans = bs(a,m,n);
cout<<ans;
}
第二段(直接ac)
#include<stdio.h>
#include<iostream>
#include <algorithm>
using namespace std;
long long a[1000010];
int main(){
long long n,m,ans,i;
scanf("%lld%lld",&n,&m);
for(long long i=0;i<n;i++){
scanf("%lld",&a[i]);
}
sort(a,a+n);
long long r=a[n-1],l=a[0],sum=0,mid;
while(l<=r){
sum=0;
mid = (l+r)/2;
for(i=0;i<n;i++){
if(a[i]>mid)
sum=sum+(a[i]-mid);
}
if(sum<m){
r=mid-1;
}
else{
ans = mid;
l=mid+1;
}
}
cout<<ans;
}