• 二分and三分


    二分大法好!!!

    当序列有序时可以用二分查找

    每次偏向不能成立的方向

    保留现在可以成立的最优解

    当可能较多时可以先二分答案然后验证,时间复杂度问o((验证所需时间复杂度)*log(答案的所有可能数))

    1:当要求最大的数最小时

    {

    #define mid ((l+r)>>1)

    if(不成立)

    l=mid+1;

    else

    r=mid;

    }

    2:当要求最小的数最大时

    {

    #define mid ((l+r+1)>>1)

    if(不成立)

    r=mid+1;

    else

    l=mid;

    }

    //stl 二分:lower_bound(a+1,a+n+1,x);upper_bound(a+1,a+n+1,x);

    默认二分的序列必须为从小到大;

    若更改从大到小:lower_bound(a+1,a+n+1,x,greater<int>());upper_bound(a+1,a+n+1,x,greater<int>());

    默认下:(lower_bound(a+1,a+n+1,x)-a):a序列中第一个大于等于x的数在a数组中的下标

        (upper_bound(a+1,a+n+1,x)-a):a序列中第一个大于x的数在a数组中的下标

    三分大发好~~~~~

    先在区间内取一个mid,再在l和mid之间取一个mid1,

    找最大值时舍去mid和mid1中较小的一侧的数,

    找最大值是舍去mid和mid1中较大的一侧的数

    二分三分在探查的最后如果不能确定结束条件时可以在区间较小时枚举答案

  • 相关阅读:
    4500 小Q系列故事——屌丝的逆袭
    HDU 1171 Big Event in HDU
    linux库文件 /usr/lib
    HDU 1860 统计字符
    编程之美~~传话游戏
    HDU 1087 Super Jumping! Jumping! Jumping!
    HDU 1203 I NEED A OFFER!
    各种树
    HDU 3127 WHUgirls
    01背包 完全背包 多重背包 二维费用背包
  • 原文地址:https://www.cnblogs.com/zyfltyyz/p/11713013.html
Copyright © 2020-2023  润新知