二分
常用函数
二分函数是二分查找,记得排序之后再调用函数
binary_search(a+begin,a+end,x)
因为这一函数是使用二分查找这一数组中是否存在x,所以返回值为true或false
lower_bound(a+begib,a+end,x)
这个函数查找这一数组中第一个大于等于x的值,要注意要是x不存在依然可以找到比x大的值,要注意返回值为这一位置的地址,要减去该数组首地址才是这个值的位置
upper_bound(a+begin,a+end,x)
与上一个函数不一样的是寻找的是大于x的第一个值,别的完全一致
板子
while(1){
long long ans=0;
if(l>r)
break;
mid=l+(r-l)/2;
//cout<<l<<" "<<r<<" "<<mid<<" ";
for(int i=1;i<=n;i++){
ans+=((a[i]>mid)?(a[i]-mid):0);
}
if(ans>m)
l=mid+1;
else if(ans<m)
r=mid-1;
else {
r=mid;
break;
}
//cout<<ans<<endl;
}
cout<<r<<endl;