首页 > 其他分享 >二分板子

二分板子

时间:2023-08-12 10:26:45浏览次数:29  
标签:二分 cnt int ll mid 板子 ans check

1.求最大值最小

while (l <= r){
    mid = (l + r) >> 1;
    if (check(mid)) ans = mid, r = mid - 1;
        else l = mid + 1;
}

例题 洛谷p3853 路标设置

code#include<bits/stdc++.h>

using namespace std;
int l, n, k, a[100010], r, ll, mid, ans, cnt;
bool check(int mid){
    cnt = 0;
    for ( int i = 2; i <= n; i++){
        cnt += (a[i] - a[i-1] - 1) / mid;
    if (cnt > k) return false;
    }
    return true;
}
int main(){
    cin >> l >> n >> k;
    for ( int i = 1; i <= n; i++) cin >> a[i];
    r = l; ll = 1;
    while (ll <= r){
        mid = (ll + r) >> 1;
        if (check(mid)) ans = mid, r = mid - 1;
            else ll = mid + 1;
        }
    cout << ans ;
    return 0;
}

 

2.求最小值最大

while (l <= r){
    mid = (l + r) / 2;
    if (check(mid)) ans = mid, l = mid + 1;
        else r = mid - 1;
}

注:防超出int 用 mid = l + ( r - l ) / 2;

标签:二分,cnt,int,ll,mid,板子,ans,check
From: https://www.cnblogs.com/nameko/p/17624411.html

相关文章

  • 简单使用二分查找法
    #include<stdio.h>intmain(void){ intarr[]={1,2,3,4,5,6,7,8,9,10}; intsz=sizeof(arr)/sizeof(arr[0]);//元素个数 intNumber=5;//需要查找的值 intright=sz-1;//右下标 intleft=0;//左下标 while(left<=right){ inthalf=(right+l......
  • 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素
    704二分查找题目给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回-1。第一想法判断条件是value=target因为数组是升序,其实每种查找方法应该相差不大?不过题目都标了二分查找了emmm思......
  • 月度开销--二分法
    【题目描述】农夫约翰是一个精明的会计师。他意识到自己可能没有足够的钱来维持农场的运转了。他计算出并记录下了接下来N(1≤N≤100,000)天里每天需要的开销。约翰打算为连续的M(1≤M≤N)个财政周期创建预算案,他把一个财政周期命名为fajo月。每个fajo月包含一天或连......
  • ABC245E Wrapping Chocolate [线段树二分]
    也许更好的阅读体验\(\mathcal{Description}\)\(n\)个物品有长和宽,\(m\)个盒子也有长和宽,一个盒子最多可以装一个物品,问\(n\)个物品能否都放进盒子,物品和盒子不能旋转\(\mathcal{Solution}\)先离散化长和宽,将物品和盒子按照长从大到小排序考虑到当前物品时将所有长大于等于当......
  • 二分答案,二分搜索,封装
    namespacebinarySearch{ //最后一个小于等于 template<typenameT> T*binarySearchLastSmall(T*l,T*r,intkey){ while(l+1<r){ T*mid=l+(r-l)/2; if(*mid<=key)l=mid; elser=mid; } returnl; } //最后一个小于 template<typenameT>......
  • 计算几何の板子
    一精度处理\(eps\)和\(sgn\)constdoubleeps=1e-8;intsgn(doublex){//判断大小if(fabs(x)<eps)return0;elsereturnx<0?-1:1;}二点1点的初始化向量的表示形式上与点完全相同重载点运算符,支持向量的四种运算structPoint{doublex,y;Poi......
  • 二分图与匹配 I :二分图的最大匹配
    引入:什么是二分图,什么是匹配口头语言描述:一个图,你把他的点集划为两个集合,让每个集合之间的点没有连边,就是一个二分图。二分图的一个等价定义是:不含有奇数条边的环的图就是一个二分图。证明:显然,观察每一条路径,都是从一个点集走向另外一个点集,则一个环必定得走偶数次。匹配,则......
  • 二分图相关定理
    最长反链:一张有向无环图的最长反链为一个集合\(S\subseteqV\),满足对于\(S\)中的任意两个不同的点\(u,v\inS(u\nev)\),\(u\)不能到达\(v\),\(v\)也不能到达\(u\),且\(S\)的大小尽量大最小不可重链覆盖:在DAG中选出若干条链,经过每个点一次,且链数尽量少最小点覆盖:......
  • 7-18 二分法求多项式单根 (20分)
    7-18 二分法求多项式单根 (20分)二分法求函数根的原理为:如果连续函数f(x)在区间[a,b]的两个端点取值异号,即f(a)f(b)<0,则它在这个区间内至少存在1个根r,即f(r)=0。二分法的步骤为:检查区间长度,如果小于给定阈值,则停止,输出区间中点(a+b)/2;否则如果f(a)f(b)<0,则计算中点的值f((a+b)/2)......
  • 常用板子
    树状数组点击查看代码intc[N];intask(intx){intres=0;for(;x;x-=x&-x)ans+=c[i];returnans;}voidadd(inti,intx){for(;x<=n;x+=x&-x)c[x]+=y;}intpre(intl,intr){returnask(r)-ask(l-1);}......