首页 > 其他分享 >二分查找知识总结

二分查找知识总结

时间:2023-11-22 22:56:04浏览次数:30  
标签:二分 总结 10000 int 浮点数 样例 mid 查找

整数二分:

二分的本质并不是单调性,而是从一半满足一半不满足的区间中找到边界点。

模板题:

数的范围

给定一个按照升序排列的长度为n的整数数组,以及q个查询。

对于每个查询,返回一个元素k的起始位置和终止位置(位置从0开始计数)。

如果数组中不存在该元素,则返回 -1 -1

输入格式

第一行包含整数n和q,表示数组长度和询问个数。

第二行包含n个整数(均在1~10000范围内),表示完整数组。

接下来q行,每行包含一个整数k,表示一个询问元素。

输出格式

共q行,每行包含两个整数,表示所求元素的起始位置和终止位置。

如果数组中不存在该元素,则返回 -1 -1

数据范围

1 <= n <= 100000

1 <= q <= 10000

1 <= k <= 10000

输入样例:

6 3
1 2 2 3 3 4
3
4
5

输出样例:

3 4
5 5
-1 -1

 代码模版:

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 const int N = 1e5 + 10;
 6 
 7 int n, m;
 8 int q[N];
 9 
10 int main()
11 {
12     scanf("%d%d", &n, &m);
13     for (int i = 0; i < n; i++) scanf("%d", &q[i]);
14     
15     while (m--)
16     {
17         int x;
18         scanf("%d", &x);
19         
20         int l = 0, r = n - 1;
21         while (l < r)
22         {
23             int mid = l + r >> 1;
24             if (q[mid] >= x) r = mid;
25             else l = mid + 1;
26         }
27         
28         if (q[l] != x) cout << "-1 -1" << endl;
29         else
30         {
31             cout << l << ' ';
32             
33             int l = 0, r = n - 1;
34             while (l < r)
35             {
36                 int mid = l + r + 1 >> 1;
37                 if (q[mid] <= x) l = mid;
38                 else r = mid - 1;
39             }
40             
41             cout << l << endl;
42         }
43     }
44 
45     return 0;
46 }
View Code

浮点数二分:

模板题:

数的三次方根

给定一个浮点数n,求它的三次方根。

输入格式

共一行,包含一个浮点数n。

输出格式

共一行,包含一个浮点数,表示问题的解。

注意,结果保留6位小数。

数据范围

-10000 <= n <= 10000

输入样例:

1000.00

输出样例:

 10.000000

 代码模版:

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     double x;
 8     cin >> x;
 9     
10     double l = -10000, r = 10000;
11     while (r - l > 1e-8)
12     {
13         double mid = (l + r) / 2;
14         if (mid * mid * mid >= x) r = mid;
15         else l = mid;
16     }
17     
18     printf("%lf\n", l);
19     
20     return 0;
21 }
View Code

标签:二分,总结,10000,int,浮点数,样例,mid,查找
From: https://www.cnblogs.com/ykycode/p/17850345.html

相关文章

  • Web前端自动化测试Cypress实践总结
    本文主要首先主要介绍了什么是自动化测试,接着对常用的自动化测试框架进行了对比分析,最后,介绍了如果将自动化测试框架Cypress运用在项目中。一、自动化测试概述为了保障软件质量,并减少重复性的测试工作,自动化测试已经被广泛运用。在开始学习自动化测试之前,我们很有必要先搞清楚这......
  • Java语言基础知识全总结
    一.Java的优点1.      跨平台性。一次编译,到处运行。Java编译器会将Java代码编译成能在JVM上直接运行的字节码文件,C++会将源代码编译成可执行的二进制代码文件,所以C++执行速度快2.      纯面向对象。Java所有的代码都必须在类中书写。C++兼具面向对象和面向过程的特......
  • 小总结吧
    最近的状态真的很差特别是在acm这块。。写个单调队列都没弄懂,一个几乎完全都退出来的式子,我都写不出代码服了,我真的理解了单调队列要怎么做吗?真的是,写的太少了害。。不知道怎么办,时间也没有,怎么办啊。。。。太难了......
  • 项目总结第一版
    项目框架1.体会到了封装项目开发框架对于项目开发效率的重要性,如有字符串操作、xml操作,时间操作,目录和文件,日志文件,网络通讯,进程通讯,ftp客户端,数据库操作。2.项目帮助文档提供了测试用例以及参数说明,先跑通,测试后进入主函数了解项目整体功能和架构,跟随日志顺着主函数流程理解子......
  • 2023-2024-1 20232327《网络空间安全导论》第二周学习总结
    2023-2024-120232327《网络空间安全导论》第二周学习总结教材学习内容总结1.密码学历史悠久,主要分为古典密码、机械密码和线代密码;2.密码学研究主要有密码分析,密码理论,密码工程与应用以及密码管理;3.密码体制的分类:单钥密码体制和双钥密码体制;4.密码分析方法有穷举攻击法、......
  • 2023.11.22——每日总结
    学习所花时间(包括上课):9h代码量(行):0行博客量(篇):1篇今天,上午学习,下午学习;我了解到的知识点:1.JavaGUI2.会话跟踪技术明日计划:学习......
  • 每日总结20231122
    代码时间(包括上课)5h代码量(行):100行博客数量(篇):1篇相关事项:1、今天是周三,上午上的是软件构造,软件构造讲的是应用数据库和基于复用的软件规则。2、今天下午写了团队的erp,目前还没有完成,得加班了。3、今天晚上打算写写团队的ERP系统和软件构造的四则运算的GUI版本并且将生成的题......
  • 每日总结11.22
    软件复用的优点有:(1)提高生产率(2)减少维护代价(3)提高互操作性(4)支持快速原型依据复用的对象,软件复用分为(产品复用)和(过程复用)。最常用的可复用设计是(设计模式)和(架构模式)。(构件)通常是代码复用,而(设计模式)是设计复用,(框架)则介于两者之间框架方法包括:(构件技术)、(软件体系结构)和(......
  • 开源之夏 2023 | Databend 社区项目总结与分享
    开源之夏是由中科院软件所“开源软件供应链点亮计划”发起并长期支持的一项暑期开源活动,旨在鼓励在校学生积极参与开源软件的开发维护,培养和发掘更多优秀的开发者,促进优秀开源软件社区的蓬勃发展,助力开源软件供应链建设。官方网站https://summer-ospp.ac.cn/在开源之夏2023......
  • 【操作系统】磁盘克隆/系统迁移的奔溃总结
    在最近的计算机维护过程中,发现leader的电脑过于老旧,硬盘出现问题,为了保护数据安全,这边也是建议leader更换新的主机leader一听到,卧槽会丢数据,果断同意。接下来就开启我崩溃的一天。【操作系统】磁盘克隆/系统迁移的奔溃总结1.磁盘克隆由于新的主机是品牌机,考虑到保修等等问题,......