二分查找板子(check()函数)
之前找了很多博客,想找一个万能的二分板子,始终没有找到合适的,后来找同学大佬要了一个(鸣谢大佬!QAQ),现在将其上传,供日后自己学习使用。
int erfen()
{int l = 1, r = n, ans;while (l <= r){int mid = (l + r) >> 1;if (check(mid)){ans = mid;l = mid + 1;}elser = mid - 1;}return ans;
}
说明:
- check()函数是当满足查找条件以及向最佳答案压缩的方向返回true,不满足条件返回false
- l = mid + 1;和r = mid - 1;这两个表达式要根据查找目标在数组的左右情况要调换位置
- 二分实现查找lower_bound的原理:一定要理解这一段!!!比如我们要查找两个数之和等于目标值,返回一个第一个值最小的组合,当我们找到一个满足和等于目标值的时候,我们不仅要记录这个答案(将ans更新),然后将二分区间向左压缩(前提是数列先按照和大小从小到大排,如果和相同的话按前面的数从小到大排),看看能不能把区间往压一点!这才是lower_bound的核心!即:找到符合大条件的时候。先将该答案存储作为权宜之计,然后将区间向最优答案压缩,这是靠check函数的诱导来实现的!
- 总而言之:check函数保证是满足查找条件!当满足查找条件后,我们先将ans及时更新,然后根据需要,想我们想让他压缩的方向进行压缩,即l=mid+1,r=mid+1这两个式子根据需要的压缩方向决定!
if (check(mid)){ans = mid;l = mid + 1;}
一道二分+差分模板题
二分+差分的一道题
洛谷P1083
#include <bits/stdc++.h>
using namespace std;
//二分+差分数组(+前缀和)
//传送门:https://www.luogu.com.cn/problem/P1083
//题解传送门:https://www.luogu.com.cn/blog/1557114139--com/solution-p1083
int n, m;
long long a[1000000]; //每天教室的最大使用量
struct node
{int start;int end;int cost;
};
node ask[1000000]; //记录申请数量
long long c[1000000]; //差分数组
bool judge(int num) //通过二分来查找到底第哪一次出现无法访问
{memset(c, 0, sizeof(c));for (int i = 1; i <= num; i++){c[ask[i].start] += ask[i].cost;c[ask[i].end + 1] -= ask[i].cost;} //差分构造long long now = 0;for (int i = 1; i <= n; i++){now += c[i]; // now即代表当日的申请数if (now > a[i]){return true; //因为要查找不满足的第一个值,所以不满足条件的时候返回true(符合条件返回true)}}return false;
}
int main()
{scanf("%d%d", &n, &m);for (int i = 1; i <= n; i++)scanf("%d", &a[i]);for (int i = 1; i <= m; i++)scanf("%d%d%d", &ask[i].cost, &ask[i].start, &ask[i].end); //读入申请if (judge(m) == false){printf("0");return 0;}int l = 1, r = m, ans;while (l <= r){int mid = (l + r) >> 1;if (judge(mid)){ans = mid;r = mid - 1; //满足条件时,要向左压缩}elsel = mid + 1; //反之向右压缩}cout << -1 << endl;cout << ans;return 0;
}
贪心+队列模拟+二分的题
#include <bits/stdc++.h>
using namespace std;
// https://pintia.cn/problem-sets/1506479836133273600/problems/1506481091208822788
// 队列模拟+贪心+二分
#define INF 0x3f3f3f3f
int cnt = 0;
int N;
int trail[100010];
int main()
{// ios::sync_with_stdio(false);// cin.tie(0), cout.tie(0);cin >> N;for (int j = 0; j < N; j++){int remp;cin >> remp;if (cnt == 0 || trail[cnt] < remp){trail[++cnt] = remp;}else{int l = 1, r = cnt;int ans;while (l <= r){int mid = (l + r) >> 1;if (remp < trail [mid]){ans = mid;r = mid - 1;}else{l = mid + 1;}}trail[ans] = remp;}}cout << cnt;return 0;
}
二分查找板子(check()函数)相关推荐
- 二分查找法(函数binary_search)
目录 定义 复杂度 解析 函数binary_search 代码实现 运行结果 总结 定义 二分查找也叫折半查找,是一种高效率的查找方法,但是折半查找方法要求顺序存储结构,按关键字大小有序排列. 复杂度 ...
- PTA 函数题 二分查找(C语言)
本题要求实现二分查找算法. 函数接口定义: Position BinarySearch( List L, ElementType X ); 其中List结构定义如下: typedef int Posi ...
- 习题1.8 二分查找 (20 分)
习题1.8 二分查找 (20 分) 本题要求实现二分查找算法. 函数接口定义: Position BinarySearch( List L, ElementType X ); 其中List结构定义如下 ...
- 二分查找(c语言实现)
题目 本题要求实现二分查找算法. 函数接口定义: Position BinarySearch( List L, ElementType X ); 其中List结构定义如下: typedef int P ...
- 由二分查找算法学习算法的时间复杂度
文章目录 二分查找 数据 算法 函数代码 调用函数 大OOO表示法表示算法运行速度 一些常见的大 OOO 运行时间 启示: 二分查找 二分查找是一种算法,其输入是一个有序的元素列表和要查找的元素.如果 ...
- 习题1.8 二分查找 (20 分) 数据结构练习
本题要求实现二分查找算法. 函数接口定义: Position BinarySearch( List L, ElementType X ); 其中List结构定义如下: typedef int Posi ...
- 通过C语言实现二分查找法
Hellow,我是jack,今天给大家分享的是C语言实现二分查找.话不多说,让我们直接进入正题. 首先让我们了解下什么是二分查找法 基本思想是将n个元素分成大致相等的两部分,取a [n/2]与x做比较 ...
- 关于二分查找及其上下界问题的一些思考
个人认为在编程的时候,我的代码能力应该是到位的,但是昨天参加的某公司笔试彻底把这个想法给终结了,才意识到自己是多么的弱.其中印象最深刻的是一道关于二分查找上下界的问题.当时洋洋得意,STL 分分钟搞定 ...
- PTA 6-10 二分查找
PTA 6-10 二分查找 (20分) 题目链接 ->link 本题要求实现二分查找算法. 函数结构定义 Position BinarySearch( List L, ElementType X ...
最新文章
- 【洛谷 P2464】[SDOI2008]郁闷的小J(线段树)
- 算法笔记_098:蓝桥杯练习 算法提高 盾神与条状项链(Java)
- DataFrame 拼接,筛选,修改
- 写给程序员的有效学习方法
- python中常见的内置函数_Python常用内置函数总结
- FirstBird--项目流程
- 基于python的图片修复程序-可用于水印去除
- 解决只可以上QQ却不可以上网问题
- Asterisk中实现回拔
- python-socket模块介绍
- php7数组写法,数组运算符 - PHP 7 中文文档
- Active Directory证书服务
- 教您简单几步实现工业树莓派正确安装RS232转USB驱动
- 读书篇:《细说PHP》四、数组
- php两个手机号正则表达式_php中手机号码正则表达式代码
- 遥感植被指数128个
- android 高德地图 logo,Android高德之旅(3)UI Setting
- python 打开pdf文件_用python操作PDF文件
- 视频怎么制作动图?教你一招视频gif制作的方法
- Windows 11 全新 4K 壁纸发布
热门文章
- 云计算机是什么原理,云电脑的运行原理是什么?
- 微信小程序解包wxappUnpacker-master 样式解不出来 SyntaxError: Unexpected end of input 的解决方式
- 为何亚马逊的中国电商之路以失败收场?当当网创始人这样说
- android小程序-电子钢琴-滑动连续响应
- 【UV打印机】RYPC打印软件教程(七)-PCS说明(上)
- qlv转换成mp4只有声音 没有图像没有画面 解决方法
- php 用户名长度,Discuz! X2修改注册用户名长度限制解决方案
- 【云原生】这么火,你不来了解下?
- mvc 框架ember.js的简单介绍
- Android屏幕自适应