• 二分与三分


    二分与三分

    一:二分

      在一个单调有限的区间上找一个值,每一次分左右两部分,判断是在左右哪两个区间,并及时调整上下界,直至找到了目标元素,就如他的名字一样,二分,不断把数据分成两半

      但是对于解决实数类的问题,通常需要一个精确值,避免死循环

    二:二分写法

      1.整数定义域上的二分:

     1 bool Check(int p)
     2 {
     3     return p;
     4 }
     5 int Bt(int l,int r)
     6 {
     7     int ans=0,mid;
     8     while(l<=r)
     9     {
    10         mid=(l+r)>>1,
    11         Check(mid)?ans=mid,l=mid+1:r=mid-1;
    12     }
    13     return ans;
    14 }
    View Code

      2.实数定义域上的二分:

     1 double DLT=0.1;
     2 bool Check(double p)
     3 {
     4     return p;
     5  } 
     6 int Bt(double l,double r)
     7 {
     8     double ans=0,mid;
     9     while(r-l>=DLT)
    10     {
    11         mid=(r+l)/2.0;
    12         Check(mid)?ans=mid,l=mid:l=mid;
    13     }
    14 }
    View Code

    三:二分的常见模型

      1.二分答案

        最小值最大(最大值最小)

      2.二分查找

        单调数列中求排名,位置

      3.代替三分

    四:典型例题

      1.愤怒的牛

        (1).例题

        (2).思路

        (3).伪代码

      2.Best Cow Fences

        (1).例题

        (2).思路

        (3).伪代码

    五:三分

    六;上级练习

     未完待续~~~

  • 相关阅读:
    Spoj 2798 Qtree3
    [HAOI2015]树上操作
    Grass Planting
    [ZJOI2008] 树的统计Count
    Spoj375 Qtree--树链剖分
    [HNOI2012]永无乡
    雨天的尾巴
    temp
    线段树动态开点之逆序对
    线段树动态开点
  • 原文地址:https://www.cnblogs.com/SeanOcean/p/10976503.html
Copyright © 2020-2023  润新知