zoukankan      html  css  js  c++  java
  • 二分

    ///查找第一个大于等于的元素
    ///以下两种方式都可以用lower_bound和upper_bound来实现。
    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int a[10]= {1,2,2,2,3,3,3,5,6,7};
    int main()
    {


        int k;
        printf("1,2,2,2,3,3,3,5,6,7 ");
        while(~scanf("%d",&k))
        {
            int l=0,r=9;
            while(l<r)
            {
                int mid=(l+r)>>1;
                if(a[mid]<k)///即找到之后怎么做,若找第一个大于等于的就在找到等于号后继续向前找,如果小于了返回前一个
                {
                    l=mid+1;
                }
                else
                {
                    r=mid;
                }
                /*if(a[mid]>k){///找到大于查找元素的第一个,如果找不到返回最后一个位置这样就有可能找到元素位置就是想找元素位置。
                    r=mid;
                }
                else{
                    l=mid+1;
                }
                        }
                    }
                        printf("%d ",l);*/
                // int ans;
                ///ans=lower_bound(a,a+10,k)-a;///减a为位置,函数返回为地址

            }
            printf("%d ",l);
        }
    }

  • 相关阅读:
    [SDOI2015]星际战争
    [SDOI2016]生成魔咒
    hdu3311
    [ZJOI2011]最小割
    P3331 [ZJOI2011]礼物(GIFT)
    [ZJOI2010]贪吃的老鼠
    状压dp-----三进制
    noip2016 天天爱跑步
    概率期望dp
    poj2186
  • 原文地址:https://www.cnblogs.com/VectorLin/p/5356327.html
Copyright © 2011-2022 走看看