二分+优先队列例题总结(icpc vp+牛客小白月赛)

题目

20240514101201367.png&pos_id=img-YlbxsILq-1727006761086)

思路分析

要求输出最小的非负整数k,同时我们还要判断是否存在x让整个序列满足上述条件。

  • 当k等于某个值时,我们可以得到x的一个取值区间,若所有元素得到的x的区间都有交集(重合)的话,那么说明存在x满足条件。
  • 因为b[i]的取值为1e9,因为此题不用取模,所以k*b[i]的取值不会超过1e18,所以k的取值范围为0~1e9。我们可以二分枚举k的取值,若不存在x满足条件则往右区间枚举,反之则往左区间枚举。
  • 时间复杂度nlogn。

AC代码

#include "bits/stdc++.h"
using namespace std;
#define int long long
#define endl '\n'
const int MAXN=3e5+10;
int n;
int a[MAXN],b[MAXN];bool check(int k) {int xl = a[1] - k*b[1];int xr = a[1] + k*b[1];for (int i = 2; i <= n; ++i) {int ll = a[i] - k*b[i];int rr = a[i] + k*b[i];if (ll > xl) xl=ll;if (rr < xr) xr=rr;}if (xr < xl) return false;return true;
}void solve() {cin >> n;for (int i = 1; i <= n; ++i) cin >> a[i];for (int i = 1; i <= n; ++i) cin >> b[i];int l=0,r=1e9+1;while(l<r) {int mid=(l+r)/2;if (check(mid)) r=mid;else l=mid+1;}cout << l << endl;
}signed main() {ios ::sync_with_stdio(false);cin.tie(nullptr);int t=1;cin >> t;while (t--) solve();
}

代码技巧

  • 判断区间是否存在交集
bool check(int k) {int xl = a[1] - k*b[1];int xr = a[1] + k*b[1];for (int i = 2; i <= n; ++i) {int ll = a[i] - k*b[i];int rr = a[i] + k*b[i];if (ll > xl) xl=ll;if (rr < xr) xr=rr;}if (xr < xl) return false;return true;
}

题目

在这里插入图片描述

思路分析

贪心思路。要尽可能占最多的线段,那么我们每次应该选择最边缘的坐标保证不会影响到其他线段。

可以对线段的左端点进行排序,如果左端点相等,优先占领右端点小的线段,所以再给右端点进行排序。

由于当两个线段左端点相等时,我们需要将线段的左端点进行更新(右移一位),重新进行排序。所以可以通过优先队列来维护线段的优先性,来模拟这个过程。

**需要注意的是:**在对线段左端点进行更新的同时,要注意线段的长度,如果线段的长度为0,则无法将左端点右移,则此端点无法被占领。

AC代码

#include <bits/stdc++.h>
using namespace std;
const int MAXN=3e5+10;
int n;
struct node
{int l,r;bool operator < (const node &a) const {if (l==a.l) return r>a.r;return l>a.l;}
}a[MAXN];void solve()
{cin>>n;priority_queue<node>q;for(int i = 1; i <= n ; i ++){cin>>a[i].l>>a[i].r;q.push(a[i]);}int ans=0,tmp=0;node nd;while(!q.empty()) {nd=q.top();q.pop();if (nd.l>tmp) {ans++;tmp=nd.l;}else if (nd.l+1<=nd.r) {nd.l=tmp+1;q.push(nd);}}cout << ans << endl;
}int main()
{ios::sync_with_stdio(false);cin.tie(0);int t=1;cin>>t;while(t--) solve();return 0;
}

题目

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

思路分析

  • 由于ai的范围小于1e9,也就是最大2^31-1,循环的次数不超过32次,常数级别时间复杂度,可以直接模拟。

  • 如何模拟?

    因为每次收割麦子都会得到原来麦子的2倍,且只有最后当麦子等级为x的时候才算是有效的。

    所以可以用b数组来模拟,bi代表有多少麦子能在第i轮达到x。最后求出b数组中每一轮小麦的数量×2^i的最大值即可。

AC代码

#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1000010;
int n,a[N],x,b[50];
void solve() {cin>>n;for(int i=1;i<=n;i++) cin>>a[i];cin>>x;for(int i=1;i<=n;i++) {int k=a[i];int c=0;while(k>x) {k=(k+2)/3;c++;}if (k==x) b[c]++;}ll maxn=-1;int k;for(int i=0;i<=40;i++) {if (maxn<(ll)b[i]*pow(2,i)) {maxn=b[i]*pow(2,i);}}cout<<maxn;
}int main() {ios::sync_with_stdio(false);cin.tie(0);solve();
}

代码技巧

  • 每次a[i]都对3进行向上取整,直接(a[i]+2)/3;同样的,对3进行向下取整,直接(a[i]-2)/3。即对k进行向下或向上取整的公式为:

    a[i]=(a[i]-k+1)/k

  • 用一个b数组模拟第k轮的情况,每一轮的结果为b[i]*pow(2,k);

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Maven-一、分模块开发

Maven进阶 文章目录 Maven进阶前言创建新模块向新模块装入内容使用新模块把模块部署到本地仓库补充总结 前言 分模块开发可以把一个完整项目中的不同功能分为不同模块管理&#xff0c;然后模块间可以相互调用&#xff0c;该篇以一个SSM项目为目标展示如何使用maven分模块管理。…

没错,我给androidx修了一个bug!

不容易啊&#xff0c;必须先截图留恋&#x1f601; 这个bug是发生在xml中给AppcompatTextView设置textFontWeight&#xff0c;但是却无法生效。修复bug的代码也很简单&#xff0c;总共就几行代码&#xff0c;但是在找引起这个bug的原因和后面给androidx提pr却花了很久。 //App…

云手机的海外原生IP有什么用?

在全球数字化进程不断加快的背景下&#xff0c;企业对网络的依赖程度日益加深。云手机作为一项创新的工具&#xff0c;正逐步成为企业优化网络结构和全球业务拓展的必备。尤其是云手机所具备的海外原生IP功能&#xff0c;为企业进入国际市场提供了独特的竞争优势。 什么是海外原…

DNF Decouple and Feedback Network for Seeing in the Dark

DNF: Decouple and Feedback Network for Seeing in the Dark 在深度学习领域&#xff0c;尤其是在低光照图像增强的应用中&#xff0c;RAW数据的独特属性展现出了巨大的潜力。然而&#xff0c;现有架构在单阶段和多阶段方法中都存在性能瓶颈。单阶段方法由于域歧义&#xff0c…

如何使用 3 种简单的方法将手写内容转换为文本

手写比文本更具艺术性&#xff0c;这就是许多人追求手写字体的原因。有时&#xff0c;我们必须将手写内容转换为文本&#xff0c;以便于存储和阅读。本文将指导您如何轻松转换它。 此外&#xff0c;通常以扫描的手写内容编辑文本很困难&#xff0c;但使用奇客免费OCR&#xff…

视觉距离与轴距离的转换方法

1.找一个明显的参照物&#xff0c;用上方固定的相机拍一下。保存好图片 2.轴用定长距离如1mm移动一下。 3.再用上相机再取一张图。 4.最后用halcon 将两图叠加 显示 效果如下 从图上可以明显的看出有两个图&#xff0c;红色标识的地方。 这时可以用halcon的工具画一个长方形…

Cesium 绘制可编辑点

Cesium Point点 实现可编辑的pointEntity 实体 文章目录 Cesium Point点前言一、使用步骤二、使用方法二、具体实现1. 开始绘制2.绘制事件监听三、 完整代码前言 支持 鼠标按下 拖动修改点,释放修改完成。 一、使用步骤 1、点击 按钮 开始 绘制,单击地图 绘制完成 2、编辑…

误差评估,均方误差、均方根误差、标准差、方差

均方根误差 RMSE/RMS 定义 RMSE是观察值与真实值偏差的平方&#xff0c;对于一组观测值 y i y_i yi​ 和对应的真值 t i t_i ti​ R M S E 1 n ∑ i 1 n ( y i − t i ) &#xff0c;其中n是观测次数 RMSE\sqrt{\frac1n \sum_{i1}^n (y_i-t_i)} \text{&#xff0c;其中n是…

2.个人电脑部署MySQL,傻瓜式教程带你拥有个人金融数据库!

2.个人电脑部署MySQL&#xff0c;傻瓜式教程带你拥有个人金融数据库&#xff01; ‍ 前边我们提到&#xff0c;比较适合做量化投研的数据库是MySQL&#xff0c;开源免费。所以今天我就写一篇教程来教大家如何在自己的环境中部署MySQL。 在不同的设备或系统中安装MySQL的步骤…

局部凸空间及其在算子空间中的应用之四——归纳极限空间2

局部凸空间及其在算子空间中的应用之四——归纳极限空间2 前言一、归纳极限拓扑中极限的含义总结 数学的真理是绝对的&#xff0c;它超越了时间和空间。——约翰冯诺伊曼 前言 在上一篇文章中&#xff0c;我们讨论了归纳极限拓扑的概念和与连续线性算子有关的一个重要结论。认…

为什么编程很难?

之前有一个很紧急的项目&#xff0c;项目中有一个bug始终没有被解决&#xff0c;托了十几天之后&#xff0c;就让我过去协助解决这个bug。这个项目是使用C语言生成硬件code&#xff0c;是更底层的verilog&#xff0c;也叫做HLS开发。 项目中的这段代码并不复杂&#xff0c;代码…

postman控制变量和常用方法

1、添加环境&#xff1a; 2、环境添加变量&#xff1a; 3、配置不同的环境&#xff1a;local、dev、sit、uat、pro 4、 接口调用 5、清除cookie方法&#xff1a; 6、下载文件方法&#xff1a;

calibre-web报错:File type isn‘t allowed to be uploaded to this server

calibre-web报错&#xff1a;File type isnt allowed to be uploaded to this server 最新版的calibre-web在Upload时候会报错&#xff1a; File type isnt allowed to be uploaded to this server 解决方案&#xff1a; Admin - Basic Configuration - Security Settings 把…

2024PDF内容修改秘籍:工具推荐与技巧分享

现在我们使用PDF文档的频率越来越高了&#xff0c;很多时候收到的表格之类的资料也都是PDF格式的&#xff0c;如果进行转换之后编辑再转换为PDF格式还是有点麻烦的&#xff0c;那么pdf怎么编辑修改内容呢&#xff1f;这篇文章我将介绍几款可以直接编辑PDF文件的工具来提高我们的…

鸿蒙next 带你玩转鸿蒙拍照和相册获取图片

前言导读 各位网友和同学&#xff0c;相信大家在开发app的过程中都有遇到上传图片到服务器的需求&#xff0c;我们一般是有两种方式&#xff0c;拍照获取照片或者调用相册获取照片&#xff0c;今天我们就分享一个小案例讲一下这两种情况的实现。废话不多说我们正式开始 效果图…

安全带检测系统源码分享

安全带检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Visio…

Linux,uboot,kernel启动流程,S5PV210芯片的启动流程,DRAM控制器初始化流程

一、S5PV210芯片的DRAM控制器介绍、初始化DDR的流程分析 1、DRAM的地址空间 1)从地址映射图可以知道&#xff0c;S5PV210有两个DRAM端口。 DRAM0的内存地址范围&#xff1a;0x20000000&#xff5e;0x3FFFFFFF&#xff08;512MB&#xff09;&#xff1b;DRAM1:的内存地址范围…

HarmonyOS---权限和http/Axios网络请求

网络请求(http,axios) 目录 一、应用权限管理1.1权限的等级1.2授权方式1.3声明权限的配置1.4如何向用户进行申请 二、内置http请求使用三、Axios请求使用&#xff08;建议&#xff09;3.1 使用方式一3.2 使用方式二&#xff08;建议&#xff09; 一、应用权限管理 应用权限保护…

SpringCloud Alibaba之Seata处理分布式事务

&#xff08;学习笔记&#xff0c;必用必考&#xff09; 问题&#xff1a;Transactional 的9种失效场景&#xff1f; 1、介绍 1.1、简介 官网地址&#xff1a;Apache Seata 源码地址&#xff1a;Releases apache/incubator-seata GitHub Seata是一款开源的分布式事务解决…

OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【文件系统】上

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ 子系统开发内核 轻量系统内核&#xff08;LiteOS-M&#xff09; 轻量系统内核&#…