二分

常用函数

二分函数是二分查找,记得排序之后再调用函数

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;
posted @ 2022-08-03 12:00  zyzzzzlh  阅读(129)  评论(1)    收藏  举报