【整数二分】难题选讲

对应洛谷题单里面【整数二分】几道同学们不太好理解的题目,写个解析
A-1数对题目链接
实际上本题方法很多,我先说个好做的办法
我们可以用map标记所有数的个数,枚举数字A[i],在map里面查找C-A[i]数字的个数,统计答案即可,这种方法很简单,而且map查询也是O(logN)

 for(int i=1;i<=n;i++){read(a[i]);s[a[i]]++;}ll ans=0;for(int i=1;i<=n;i++){ans=ans+s[a[i]-m];}

重点讲下本题如何二分来做???
我们对所有的数值排序后,每次去二分查找到A[i]+C出现的最小下标以及最大下标,做差即可。排序后一定是AAAABBBBBCCCCCDDDD这样

P1678 烦恼的高考志愿
因为本题估分可能超过录取线,也可能低于录取线,总之差的绝对值就是不满意度,为了计算某个估分的不满意度,实际上我们需要两个分数,
存在录取分数[i]小于等于估分且估分小于录取分数[i+1],毕竟要计算估分少了或大了两种情况的不满意度,取最小值。

我们对录取分数线排序一下,为了更好地明确范围,我们把原本录取分数数组两端新增两个值,一个极小值-1e9,一个极大值1e9,然后二分查找录取分数里面小于等于当前估分且最接近当前估分的录取分数的位置。查找到以后计算答案即可。注意本题答案最终超过int范围

如果本题只有70分,说明左端点没考虑好。

#include<bits/stdc++.h>
using namespace std;
int G[100005];//估分 
int F[100005]; //录取分 
int main(){int n,m;scanf("%d%d",&m,&n);for(int i=1;i<=m;i++){scanf("%d",&F[i]);}sort(F+1,F+1+m);F[m+1]=1e9;F[0]=-1e9;long long int sum=0;for(int i=1;i<=n;i++){scanf("%d",&G[i]);int L=0,R=m+1;//二分左边录取分最接近估分的位置//那么估分一定在F[L]~F[L+1]里面求得最小不满意 while(L<R){int mid=(L+R+1)/2;if(F[mid]<G[i]){L=mid;}else{R=mid-1;}}sum=sum+min(abs(G[i]-F[L]),abs(F[L+1]-G[i]));}printf("%lld",sum);return 0;
}

P8160 [JOI 2022 Final] 星际蛋糕 (Intercastellar)
本题呢,先按题目说的把偶数都拆了吧,其实很好写,直接写个while循环就能搞定。假如是一开始 i i i位置的数是 A [ i ] A[i] A[i] 那么直接对 A [ i ] A[i] A[i]操作就好了, A [ i ] A[i] A[i]表示从左到右的第 i i i段位置最终的数字。既然涉及到一段一段数字的拆分,很显然我们能计算出某段数字的起点以及终点,这个怎么计算呢?其实就是从左到右的一个过程,每次拆完数字以后,计算出这一段数字有多少个,我们当前的总长度+1就是本段数字的起点位置,当前总长度+当前段的长度就是本段数字的终点,因为前面也有很多段数字。

计算 s u m [ i ] sum[i] sum[i]表示前 i i i段数字的终点位置,最终我们对于每个查询的 X j Xj Xj直接二分找到严格小于 X j Xj Xj且最大的位置 L L L,那么第 X j Xj Xj位置的数一定处于第 L + 1 L+1 L+1段里面

#include<bits/stdc++.h>
using namespace std;
long long int pos[200005];
long long int sum[200005];
long long int w;
int A[200005];
bool check(int x){return sum[x]<w;
}
int main(){int n,q;scanf("%d",&n);int len=0;for(int i=1;i<=n;i++){int x;scanf("%d",&A[i]);int cnt=1;while(A[i]%2==0){A[i]=A[i]/2;cnt=cnt*2;}pos[i]=len+1;//第i种数的起点len=len+cnt;//终点 sum[i]=sum[i-1]+cnt;//sum[i]表示前i种数结束的位置 }scanf("%d",&q);while(q--){scanf("%lld",&w);int L=0,R=n;	while(L<R){int mid=(L+R+1)/2;if(check(mid)){L=mid;}else{R=mid-1;}}//二分找到严格小于w的位置,那么w必定处于L+1的位置里面 printf("%d\n",A[L+1]);}return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++11右值引用

传统的C语法中就有引用的语法&#xff0c;而C11中新增了的右值引用语法特性&#xff0c;所以从现在开始我们之前学习的引用就叫做左值引用。无论左值引用还是右值引用&#xff0c;都是给对象取别名。 左值与左值引用 左值是一个表示数据的表达式(如变量名或解引用的指针)&…

Qt-线程1-Run

0. 写在前面 一个应用程序一般只有一个线程&#xff0c;一个线程内的操作是顺序执行的&#xff0c;如果有某个比较耗时间的计算或操作&#xff0c;比如图像处理大数据图像、网络通信中的文件传输&#xff1b;在一个线程内操作时&#xff0c;用户界面就能冻结而不能及时响应。这…

34-2 SSRF(服务器端请求伪造)漏洞 - SSRF相关函数

简介 file_get_contents(): 功能: 该函数用于将整个文件读取到一个字符串中,可以用于获取本地或远程文件的内容。风险: 如果未经验证的用户输入作为参数传递给该函数,并且允许读取远程文件,则可能导致SSRF漏洞,攻击者可以利用该漏洞读取服务器内部的文件或者执行未经授权…

C++面试经典问题

常见问题&#xff1a;智能指针、多态、虚函数、STL原理、链表、排序、二叉树、设计模式、线程进程、内存 对象所有权 在接触智能指针之前首先要理解对象的所有权是什么&#xff0c;在这之前我们总是用new和delete来进行内存的申请与释放&#xff0c;在这种堆内存分配的方式中…

【退役之重学Java】关于lambda表达式和函数式接口

使用 lambda 表达式为作为实参&#xff0c;传递给形参&#xff0c;形参为函数式接口&#xff0c;此lambda表达式没有指定类型&#xff0c;如何能匹配函数式接口的形参类型呢&#xff1f; 函数式接口作为参数&#xff0c;实参可以直接用lambda表达式吗&#xff0c;是什么原理 函…

【嵌入式DIY实例】-MODBUS串行通信

MODBUS串行通信 文章目录 MODBUS串行通信1、什么是RS-4852、MAX485 TTL转RS485转换器3、硬件准备4、代码实现4.1 主机和从机之间简单通信4.2 主/从机之间LED控制在本文中,我们将介绍如何使用 MAX485 MODBUS 在Arduino之间进行串行通信。 我们将使用 Arduino nano 板和 MODBUS …

springboot国际化多语言

1,新建国际化多语言文件 在resources目录下新建 messages.properties 其他语言的文件 编辑messages.properties文件,下方从text切换到Resource Bundle ,即可对照着编辑多语言文件 (如果没有找到Resource Bundle,先在settings->plugins中安装Resource Bundle Editor) 2,配…

ComfyUI如何操作?借鉴文章有官方ComfyUI 手册、COmfyui初学者教程等

ComfyUI 是一个基于节点的用户界面&#xff0c;用于构建生成图像的工作流程。它通过将不同的节点连接在一起来实现这一功能。 ComfyUI 的基本操作步骤&#xff08;“精”简版&#xff09; 1. 安装 ComfyUI 访问 ComfyUI 的 GitHub 页面&#xff0c;根据您的操作系统&#xff08…

Lumos学习王佩丰Excel第二讲:单元格格式设置

今天学会GIF录制了&#xff0c;分享知识会更简便一些&#xff0c;话不多说&#xff0c;开始吧~ 一、美化表格 1、设置单元格格式的路径 从菜单栏进入&#xff1a; 选中区域&#xff08;单元格&#xff09;- 右键“设置单元格格式”&#xff1a; 2、合并单元格 合并一行 批量…

5.3 用栈翻转数组,动态规划求斐波那契数列

5.3 用栈翻转数组&#xff0c;动态规划求斐波那契数列 1. 用栈翻转数组 assume cs:code,ds:data,ss:stack data segmentarr dw 1111h,2222h,3333h,4444h,5555h,6666h,7777h,8888hres db 800 dup(0) data endsstack segmentdb 100 dup(0) stack endscode segmentstart:mov ax,…

YOLOv8模型剪枝实战:Network Slimming网络瘦身方法

课程链接&#xff1a;YOLOv8模型剪枝实战&#xff1a;Network Slimming网络瘦身方法_在线视频教程-CSDN程序员研修院 YOLOv8是一个当前非常流行的目标检测器&#xff0c;本课程使用Network Slimming&#xff08;网络瘦身&#xff09;剪枝方法对YOLOv8进行模型剪枝&#xff0c;…

力扣347. 前 K 个高频元素

思路&#xff1a;记录元素出现的次数用map&#xff1b; 要维护前k个元素&#xff0c;不至于把所有元素都排序再取前k个&#xff0c;而是新建一个堆&#xff0c;用小根堆存放前k个最大的数。 为什么是小根堆&#xff1f;因为堆每次出数据时只出堆顶&#xff0c;每次把当前最小的…

手动实现Tomcat底层机制+自己设计Servlet

文章目录 1.Tomcat整体架构分析自己理解 2.第一阶段1.实现功能2.代码1.TomcatV1.java 3.调试阶段1.阻塞在readLine导致无法返回结果 4.结果演示 3.第二阶段1.实现功能2.代码1.RequestHander.java2.TomcatV2.java 3.调试阶段1.发现每次按回车会接受到两次请求 4.结果演示 4.第三…

《牛客》-C小红的字符串构造

思路&#xff1a;我以符合条件的最极限情况来安排回文&#xff0c;即两个两个字符为一组回文&#xff0c;保证其不参与其他回文字符串的构造&#xff0c;以这样子的形式输出k个&#xff0c;剩下的都只输出不连续的当个字符&#xff08;‘a’i%26&#xff09; 看不到&#xff1…

使用Python实现K近邻算法

K近邻&#xff08;K-Nearest Neighbors&#xff0c;简称KNN&#xff09;是一种简单而有效的分类和回归算法&#xff0c;它通过比较新样本与训练样本的距离来进行预测。在本文中&#xff0c;我们将使用Python来实现一个基本的K近邻算法&#xff0c;并介绍其原理和实现过程。 什…

[dvwa] Command Injection

命令注入 0x01 low 没有过滤&#xff0c;直接利用 127.0.0.1 && ip a 函数 php_uname(mode) 动态地检查服务器的操作系统 ‘s’&#xff1a;操作系统名称 ‘n’&#xff1a;网络主机名 ‘r’&#xff1a;操作系统发行版本号 ‘v’&#xff1a;操作系统版本 ‘m’&…

书籍《笔记的方法》读后感

读完《笔记的方法》有几周的时间&#xff0c;书里有些记录的内容&#xff0c;觉得非常有价值的&#xff0c;自己的观点&#xff0c;当下读书&#xff0c;其实并没有那么高大尚&#xff0c;就是存粹陶冶下情操&#xff0c;读书还是有一定作用的&#xff0c;毕竟看书只能慢慢来&a…

淘宝API接口详解:如何高效利用API进行电商开发

淘宝API接口详解&#xff1a;如何高效利用API进行电商开发 请求示例&#xff0c;API接口接入Anzexi58 在电商行业蓬勃发展的今天&#xff0c;淘宝作为国内最大的电商平台之一&#xff0c;为商家和开发者提供了丰富的API接口。这些接口使得电商开发变得更加高效和便捷。本文将详…

【算法篇】三道题理解算法思想——认识BFS

BFS&#xff08;宽搜&#xff09; 宽度优先遍历和深度优先遍历组成了大家熟悉的搜索算法&#xff0c;这两种算法也是蓝桥杯之类竞赛题的常考思想&#xff0c;正巧马上蓝桥杯临近&#xff0c;博主也是刷了很多BFS相关的题型&#xff0c;在这篇文章中会从力扣上选取三道简单的宽搜…

一键无痕清理:高效删除Mac文件夹,释放宝贵存储空间

在当今重视隐私的时代&#xff0c;当转让或出借Mac电脑时&#xff0c;确保个人文件和敏感信息彻底清除至关重要。常规删除Mac上的文件和文件夹仅使数据看似消失&#xff0c;实际上它们仍驻留在硬盘上&#xff0c;存在被数据恢复软件找回的风险。为实现不可逆的删除效果&#xf…