二分查找之新手篇——函数使用

摘要:
您的任务是找到数组中大于数字键的最小元素。第二行有n个整数,表示数组中n个元素的值。接下来是m行。每行都有一个整数键。如果没有所需的键值,请使用-1代替#includeusingspacestd;intmain(){intn,m;while(scanf(“%d%d”,&n,-m)!

首先介绍c++万能头文件

#include<bits/stdc++.h>

using namespace std;(比较适合偷懒,但是不能确保不会出错)(用还是可以的,粗错了再回头来改嘛)owo

接下来介绍一下两个二分查找函数;

upper_bound()与lower_bound();

ForwardIter lower_bound(ForwardIter first, ForwardIter last,const _Tp& val)算法(函数)返回一个非递减序列[first, last)中的第一个大于等于值val的地址

ForwardIter upper_bound(ForwardIter first, ForwardIter last, const _Tp& val)算法(函数)返回一个非递减序列[first, last)中的第一个大于值val的地址

参考:https://blog.csdn.net/zyq_19960204/article/details/49516981

upper_bound(r,l,key)

r:代表数组中的首地址;l代表数组的末尾地址;key代表我们要查找的那个数值;

upper_bound反回的是数组中(排序完成的数列)大于key的那个数据的地址;

同理lower_bound返回的是大于等于key的那个数据的地址。

参考:https://blog.csdn.net/sdz20172133/article/details/80101838

例题:入门基础之二分查找 

数组a[]有n个元素,元素值保证不降(即数组满足a1<=a2<=a3<=…<=ak<=…<=an )。

你的任务是,找到数组中大于数字key的所有元素中最小的那个。

如:每组第一排有两个数字n,m,分别代表数组的元素个数和询问的次数。(1<=n,m<=10^5)

第二排有n个整数,表示数组的n个元素的值。(1<=ai<=10^5)
接下来有m排,每排有一个整数key(1<=key<=10^5)
如果没有所求key值用-1代替;

#include<bits/stdc++.h>
using namespace std;

int main()
{
    int n,m;
    while(scanf("%d %d",&n,&m)!=EOF)
    {
        int a[100002];
        for(int i=0;i<n;i++)
        scanf("%d",&a[i]);
        while(m--)
        {
            int key,ans=-1;
            scanf("%d",&key);
            if((upper_bound(a,a+n,key)-a)>n-1)
            printf("%d
",ans);
            else
            printf("%d
",*upper_bound(a,a+n,key));
        }
    }
    return 0;
}

免责声明:文章转载自《二分查找之新手篇——函数使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇004.UDP--拼接UDP数据包,构造ip头和udp头通信(使用原始套接字)SAP UI5 使用 Smart Control 的一个具体例子下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

七大查找算法

顺序查找 二分查找 插值查找 斐波那契查找 树表查找 分块查找 哈希查找 查找是在大量的信息中寻找一个特定的信息元素。在计算机应用中,查找是常用的基本运算,例如编译程序中符号表的查找。 查找定义:根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。 查找算法分类: 1)静态查找和动态查找: 注:静态或者动态都是针对查找表而言的...

UVa 10539 (筛素数、二分查找) Almost Prime Numbers

题意: 求正整数L和U之间有多少个整数x满足形如x=pk 这种形式,其中p为素数,k>1 分析: 首先筛出1e6内的素数,枚举每个素数求出1e12内所有满足条件的数,然后排序。 对于L和U,二分查找出小于U和L的最大数的下标,作差即可得到答案。 1 #include <cstdio> 2 #include <cmath> 3...

python之递归函数、二分查找、面向对象、封装(6)

本节内容:递归函数、二分查找、面向对象、什么是类、什么是对象、组合、面向对象的三大特征 1.递归函数 2.二分查找 3.面向对象 3.1.什么是类 3.2.什么是对象 3.3.类名称空间、对象名称空间 4.组合 5.面向对象的三大特征 1、递归函数 递归函数:在一个函数里在调用这个函数本身。 递归的最大深度:998 正如你们刚刚看到的,递归函数如果不受到...

程序员必知3大查找(转)

  三种查找算法:顺序查找,二分法查找(折半查找),分块查找,散列表(以后谈)       一、顺序查找的基本思想: 从表的一端开始,顺序扫描表,依次将扫描到的结点关键字和给定值(假定为a)相比较,若当前结点关键字与a相等,则查找成功;若扫描结束后,仍未找到关键字等于a的结点,则查找失败。   说白了就是,从头到尾,一个一个地比,找着相同的就成功,找不到...

js 二分查找法之每日一更

<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html"/> <meta name="keywords" content="二分查找算法" />...

c# 二分查找

   // perform a binary search on the data   public int BinarySearch( int searchElement )   {  private int[] data;      int low = 0; // low end of the search area      int high = d...