供暖器(leetcode_475 二分)

题目

只要结果在一个单调区间内,且结果两边一边满足另一边不满足,用二分查找ans,当ans特殊时,考虑用倍增
r=max(house[n-1],heater[m-1]) 此时半径一定能包含所有的house
check时 以heater为点 看house满足范围就行了
二分模板

#include 
#include 
#include 
using namespace std;
vector house;
vector heater;
int n,m;
bool check(int r){
    int i=0;
    for(int j=0;j>n>>m;
    house.resize(n);
    heater.resize(m);
    for(int i=0;i>house[i];
    for(int i=0;i>heater[i];
    sort(house.begin(),house.end());
    sort(heater.begin(),heater.end());
    int l=0,r=max(house[n-1],heater[m-1]);
    int ans=-1;
    while( l<=r ){
        int mid=(l+r)>>1;
        if( check(mid) )   ans=mid,r=mid-1;
        else l=mid+1;
    }
    cout<

你可能感兴趣的:(题目/杂)