二分模板:
以下数组下标均是从1到n;
板子1:
```
int l=0,r=n+1;//开区间 while(l+1<r){ //l+1=r时结束 int mid=l+r>>1;//mid=l+(r-l)/2; if(check(mid)) r=mid; //最小化 else l=mid; }
```
板子2:
```
int l=1,r=n;//闭区间 while(l<r){ //l==r时结束 int mid=l+r>>1;//mid=l+(r-l)/2; if(check(mid)) r=mid; //最小化 else l=mid+1; }
```
板子3:
```
int l=1,r=n; //闭区间 while(l<=r){ //l=r+1时结束 int mid=l+r>>1;//mid=l+(r-l)/2; if(check(mid)) r=mid-1; //最小化 else l=mid+1; }
```