二分答案模板

//构造一个单调的函数,且函数值容易求,这时问题的解可以通过二分来求出 

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1000001;
int n,m;
int a[N];
ll pre[N];
int maxx;

inline ll f(int mid){
    ll cnt=0;
    
    return cnt; 
}

int main(){
    maxx=0;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);    
        if(a[i]>maxx) maxx=a[i];
    }
    sort(a+1,a+n+1);
    for(int i=1;i<=n;i++) {
        pre[i]=pre[i-1]+a[i];
    }
    ll l=0,r=maxx,mid;   //l和r的取值包含二分答案的边界(l和r都可能是答案) 
    while(l<=r){
        mid=(l+r)/2;   
        ll tem=f(mid);
        if(tem>=x / tem<=x) ans=mid,l=mid+1;  //用ans表示答案,迭代时只用管l和r 
        else r=mid-1;
    }
    printf("%d\n",ans);
    return 0;
} 

 

posted @ 2021-03-28 13:05  starlightlmy  阅读(217)  评论(0)    收藏  举报