#include<iostream>
using namespace std;
long long max(int aa,int bb){return aa>bb?aa:bb;}
long long a[1000005],n,m,i,high;
int main(){
cin>>n>>m;
for(i=1;i<=n;i++){cin>>a[i];high=max(high,a[i]);}
int l=0,r=high;
int mid=(l+r)/2;
while(l<r){
mid=(l+r)/2;int ans=0;
for(i=1;i<=n;i++)ans+=max(0,a[i]-mid);
// cout<<l<<" "<<r<<" "<<mid<<" "<<ans<<endl;
if(ans>m)l=mid+1;
else if(ans<m)r=mid;
else{cout<<mid;return 0;}
}
cout<<mid;
return 0;
}
感觉非常简单的二分答案,结果莫名9点WA……
看了下数据范围,改了个long long ,然后多A了三点……
于是乎我尝试了把<改成<=,l=mid+1
改为l=mid
,以及其他类似操作,每种组合都尝试过了,几乎每个点都A过,但是就是不能同时A……一会1,2,7,10AC,一会1,3,4,AC什么什么的
这就玄学了,蒟蒻求教各位大佬orz