35.哀家要长脑子了!--二分

模板

int check() {...}    // 检查这个数是否符合相应的要求

// 把区间[l, r] 划分成[l, mid] 和 [mid+1, r] 时使用
// 找到数组中第一个大于等于某一值得元素或满足特定条件的第一个位置
int bsearch_1(int l, int r){
    
    int mid = l + r >> 1;
    
    while(l < r) {
        if(check(mid))  r = mid;
        else    l = mid + 1;
    }  
    return l;
}

// 把区间[l, r] 划分成[l, mid-1] 和 [mid, r] 时使用、
// 找到数组中最后一个不大于某一值得元素或满足特定条件的最后一个位置
int bsearch_2(int l, int r){
    
    int mid = l + r + 1 >> 1;
    
    while(l < r){
        if(check(mid)  l = mid;
        else  r = mid - 1; 
    }
    return l;
}

模板1计算mid没有偏移。此时如果check(mid)为真,说明mid位置的元素满足条件,我们不希望直接返回,我们希望找到最左边的。因此,我们将右边界r更新为mid,即缩小搜索区间到[l, mid],继续在左侧寻找。

模板2计算mid在偶数长度区间没有影响,在奇数长度区间,向右偏移。即使当mid位置的元素满足条件,我们也不会立刻排除其右侧可能存在的更多满足条件的元素,通过将l更新为mid,我们保留了右侧的搜索空间,直到最终确定最右侧的满足条件元素。

1.789. 数的范围 - AcWing题库

#include<iostream>
using namespace std;

const int N = 1e5 + 10;
int q[N];

int main(){
    int m, n, a;
    cin >> n >> m;
    for(int i = 0; i < n; i++){
        cin >> q[i];        
    }
    
    while(m--){
        cin >> a;
        
        int l = 0, r = n - 1;
        // 找第一个
        while(l < r){
            int mid = l + r >> 1;
            if(q[mid] >= a) r = mid;
            else    l = mid + 1;
        }
        // 没有找到
        if(q[l] != a)
            cout << "-1 -1" << endl;
        else{
            
            cout << l << " ";

            // 找最后一个
            int l = 0, r = n - 1;
            
            while(l < r){
                int mid = l + r + 1 >> 1;
                if(q[mid] <= a) l = mid;
                else    r = mid - 1; 
            }
        cout << l << endl;
        }   
    }
    return 0;
}

2.790. 数的三次方根 - AcWing题库

#include<iostream>
#include<iomanip>
using namespace std;

int main(){
    double x;
    cin >> x;
    // 题目所给的范围
    double l = -10000, r = 10000;
    // 精度规定
    while(r - l > 1e-8){
        
        double mid = (l + r) / 2;
        // 满足要求 继续向左找
        if(mid * mid * mid >= x)  r = mid;
        else l = mid;
    }

    cout << fixed << setprecision(6) << l << endl;
    return 0;
}

cout 的精度是6

下面这种是指精度为n,不是小数点后的

cout << setprecision(n)

下面这种是指小数点后的精度为(n)

cout << fixed << setprecision(n)

浮点数二分模板:

bool check() { ... } // 检查该数字是否满足某一性质

int bsearch_3(double l, double r){
    
    const double eps = 1e-6; // eps表精度 取决于题目的要求
     
    while(r - l > eps){
        double mid = (l + r) / 2;
        if(chech(mid))    r = mid;
        else l = mid;
    }   
    return l;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/777987.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何第一次从零上传项目到GitLab

嗨&#xff0c;我是兰若&#xff0c;今天想给大家说下&#xff0c;如何上传一个完整的项目到与LDAP集成的GitLab&#xff0c;也就是说这个项目之前是不在git上面的&#xff0c;这是第一次上传&#xff0c;这样上传上去之后&#xff0c;其他小伙伴就可以根据你这个项目的git地址…

linux 服务器数据备份 和 mysql 数据迁移

查看域名ip 查看程序所处文件位置 list open files 1、 lsof -i :port 查看端口获取进程 pid 2、lsof -i pid 1、scp 下载服务器文件到本地 security copy protocol 2、导出服务器 mysql 数据库&#xff08;表&#xff09;到本地 mysqldump是MySQL自带的一个实用程序&…

2024亚太杯数学建模竞赛(B题)的全面解析

你是否在寻找数学建模比赛的突破点&#xff1f;数学建模进阶思路&#xff01; 作为经验丰富的数学建模团队&#xff0c;我们将为你带来2024亚太杯数学建模竞赛&#xff08;B题&#xff09;的全面解析。这个解决方案包不仅包括完整的代码实现&#xff0c;还有详尽的建模过程和解…

Linux wget报未找到命令

wget报未找到命令需要安装wget 1、下载wget安装文件&#xff0c;本次于华为云资源镜像下载 地址&#xff1a;https://mirrors.huaweicloud.com/centos-vault/7.8.2003/os/x86_64/Packages/ 2、下载后上传到安装服务器/install_package&#xff0c;执行命令安装 rpm -ivh /i…

PD虚拟机怎么联网?PD虚拟机安装Win11无法上网 pd虚拟机连不上网怎么解决 mac安装windows虚拟机教程

PD虚拟机既可以联网使用&#xff0c;也可以单机使用。如需将PD虚拟机联网&#xff0c;可以共享Mac原生系统的网络&#xff0c;其使用体验与真实系统无异。本文会详细讲解PD虚拟机如何联网&#xff0c;并会进一步解决PD虚拟机安装Win10无法上网的问题。 如果有网络相关问题的小伙…

女生学计算机好不好?感觉计算机分有点高……?

众所周知&#xff0c;在国内的高校里&#xff0c;计算机专业的女生是非常少的&#xff0c;很多小班30人左右&#xff0c;但是每个班女生人数只有个位数。这就给很多人一个感觉&#xff0c;是不是女生天生就不适合学这个东西呢&#xff1f;女生是不是也应该放弃呢&#xff1f;当…

Deep Filtered Back Projection for CT Reconstruction

CT重建中的深度滤波反投影 论文链接&#xff1a;https://ieeexplore.ieee.org/document/10411896 项目链接&#xff1a; ABSTRACT 滤波反投影(FBP)是一种经典的计算机断层扫描(CT)重建解析算法&#xff0c;具有很高的计算效率。然而&#xff0c;用FBP重建的图像往往存在过多…

Http中get与post的区别,99%的人都理解错了吧

Get和Post是HTTP请求的两种基本方法&#xff0c;要说它们的区别&#xff0c;接触过WEB开发的人都能说出一二。 最直观的区别 就是Get把参数包含在URL中&#xff0c;Post通过request body传递参数。 你可能自己写过无数个Get和Post请求&#xff0c;或者已经看过很多权威网站总…

基于TCP的在线词典系统(分阶段实现)

1.功能说明 一共四个功能&#xff1a; 注册 登录 查询单词 查询历史记录 单词和解释保存在文件中&#xff0c;单词和解释只占一行, 一行最多300个字节&#xff0c;单词和解释之间至少有一个空格。 2.功能演示 3、分阶段完成各个功能 3.1 完成服务器和客户端的连接 servic…

【大数据】什么是数据融合(Data Fusion)?

目录 一、数据融合的定义 二、数据融合的类型 三、数据融合的挑战 四、数据融合的方法 五、数据融合的关键环节 1.数据质量监控指标的制定和跟踪 2.异常检测和处理机制 3.实时数据监测与反馈机制 4.协同合作与知识共享 一、数据融合的定义 数据融合&#xff08;Data Fusion&…

JVM原理(十三):JVM虚拟机类类加载器与双亲委派模型

1. 类加载器 Java虛拟机设计团队有意把类加载阶段中的“通过一个类的全限定名来获取描述该类的二进制字节流"这个动作放到Java虚拟机外部去实现&#xff0c;以便让应用程序自己决定如何去获取所需的类。实现这个动作的代码被称为“类加载器”(Class Loader)。 对于任意一…

利用级数公式计算圆周率(π)

π是是指圆的周长与直径的比值&#xff0c;是无限不循环小数&#xff0c;有很多种方法可以求得它的近似值。这里用比较容易实现的关于π的无穷级数来求它的前10000位的取值。 π / 2 π 具体的&#xff0c;用两个字符数组x,z分别存放当前计算得到的pi值&#xff0c;数组…

在5G/6G应用中实现高性能放大器的建模挑战

来源&#xff1a;Modelling Challenges for Enabling High Performance Amplifiers in 5G/6G Applications {第28届“集成电路和系统的混合设计”(Mixed Design of Integrated Circuits and Systems)国际会议论文集&#xff0c;2021年6月24日至26日&#xff0c;波兰洛迪} 本文讨…

【学术会议征稿】第四届机械自动化与电子信息工程国际学术会议(MAEIE 2024)

第四届机械自动化与电子信息工程国际学术会议&#xff08;MAEIE 2024&#xff09; 2024 4th International Conference on Mechanical Automation and Electronic Information Engineering 由安徽大学主办&#xff0c;安徽大学电气工程与自动化学院、安徽省人机共融系统与智能…

强化训练:day13(牛牛冲钻五、最长无重复子数组、重排字符串)

文章目录 前言1. 牛牛冲钻五1.1 题目描述1.2 解题思路1.3 代码实现 2. 最长无重复子数组2.1 题目描述2.2 解题思路2.3 代码实现 3. 重排字符串3.1 题目描述3.2 解题思路3.3 代码实现 总结 前言 1. 牛牛冲钻五   2. 最长无重复子数组   3. 重排字符串 1. 牛牛冲钻五 1.1 题…

[CTF]-PWN:House of Banana堆块题型综合分析

搭配largebin attack&#xff1a; 例题&#xff08;ISCC2024 heapheap)&#xff1a; 版本&#xff1a;glibc2.31 知识点&#xff1a;largebin attack、house of banana、uaf 查看保护 查看ida delete存在uaf漏洞 largebin attack手法&#xff1a; #创建4个堆块&#xff0…

Qtgui编程基础

Qt简介 ( 框架5.9.8版本 ) Qt是源代码级的跨平台一次编写到处编译.一次开发的Qt应用程序可以移值到不同平台. Qt体系架构 Qt的整个设计都是以单根继承为主这跟java相同.所谓单根继承就是说所有的Qt类都有一个共同的祖先都是QObject类QObject类后面有三个大的子类分别负责不同…

51单片机基础8——单片机控制超声波模块

超声波模块的使用 51单片机控制超声波模块1. 软硬件条件2. 超声波控制原理2.1 超声波测距原理2.2 超声波模块工作原理 3. 接线4. 代码实现 51单片机控制超声波模块 1. 软硬件条件 单片机型号&#xff1a;STC89C52RC开发环境&#xff1a;KEIL4烧录软件&#xff1a;stc-isp超声…

进程的初步认识

目录 一、硬件方面介绍 1.冯诺依曼体系结构 2.存储分级 二、软件 方面 1.操作系统是一款进行管理的软件&#xff0c;它可以管理硬件也可以管理软件 2.操作系统如何管理&#xff1f; 三、进程 1.概念 总结 四、linux中对进程的管理 1.task_ struct内容分类 2.查看进…

C语言 -- 深入理解指针(一)

C语言 -- 深入理解指针&#xff08;一&#xff09; 1.内存和地址1.1 内存1.2 究竟该如何理解编址 2. 指针变量和地址2.1 取地址操作符&#xff08;&&#xff09;​2.2 指针变量和解引用操作符&#xff08;*&#xff09;​​2.2.1 指针变量2.2.2 如何拆解指针类型2.2.3 解引…