之前找了很多博客,想找一个万能的二分板子,始终没有找到合适的,后来找同学大佬要了一个(鸣谢大佬!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;
}

说明:

  1. check()函数是当满足查找条件以及向最佳答案压缩的方向返回true,不满足条件返回false
  2. l = mid + 1;和r = mid - 1;这两个表达式要根据查找目标在数组的左右情况要调换位置
  3. 二分实现查找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()函数)相关推荐

  1. 二分查找法(函数binary_search)

    目录 定义 复杂度 解析 函数binary_search 代码实现 运行结果 总结 定义 二分查找也叫折半查找,是一种高效率的查找方法,但是折半查找方法要求顺序存储结构,按关键字大小有序排列. 复杂度 ...

  2. PTA 函数题 二分查找(C语言)

    本题要求实现二分查找算法. 函数接口定义: Position BinarySearch( List L, ElementType X ); 其中List结构定义如下: typedef int Posi ...

  3. 习题1.8 二分查找 (20 分)

    习题1.8 二分查找 (20 分) 本题要求实现二分查找算法. 函数接口定义: Position BinarySearch( List L, ElementType X ); 其中List结构定义如下 ...

  4. 二分查找(c语言实现)

    题目 本题要求实现二分查找算法. 函数接口定义: Position BinarySearch( List L, ElementType X ); 其中List结构定义如下: typedef int P ...

  5. 由二分查找算法学习算法的时间复杂度

    文章目录 二分查找 数据 算法 函数代码 调用函数 大OOO表示法表示算法运行速度 一些常见的大 OOO 运行时间 启示: 二分查找 二分查找是一种算法,其输入是一个有序的元素列表和要查找的元素.如果 ...

  6. 习题1.8 二分查找 (20 分) 数据结构练习

    本题要求实现二分查找算法. 函数接口定义: Position BinarySearch( List L, ElementType X ); 其中List结构定义如下: typedef int Posi ...

  7. 通过C语言实现二分查找法

    Hellow,我是jack,今天给大家分享的是C语言实现二分查找.话不多说,让我们直接进入正题. 首先让我们了解下什么是二分查找法 基本思想是将n个元素分成大致相等的两部分,取a [n/2]与x做比较 ...

  8. 关于二分查找及其上下界问题的一些思考

    个人认为在编程的时候,我的代码能力应该是到位的,但是昨天参加的某公司笔试彻底把这个想法给终结了,才意识到自己是多么的弱.其中印象最深刻的是一道关于二分查找上下界的问题.当时洋洋得意,STL 分分钟搞定 ...

  9. PTA 6-10 二分查找

    PTA 6-10 二分查找 (20分) 题目链接 ->link 本题要求实现二分查找算法. 函数结构定义 Position BinarySearch( List L, ElementType X ...

最新文章

  1. 【洛谷 P2464】[SDOI2008]郁闷的小J(线段树)
  2. 算法笔记_098:蓝桥杯练习 算法提高 盾神与条状项链(Java)
  3. DataFrame 拼接,筛选,修改
  4. 写给程序员的有效学习方法
  5. python中常见的内置函数_Python常用内置函数总结
  6. FirstBird--项目流程
  7. 基于python的图片修复程序-可用于水印去除
  8. 解决只可以上QQ却不可以上网问题
  9. Asterisk中实现回拔
  10. python-socket模块介绍
  11. php7数组写法,数组运算符 - PHP 7 中文文档
  12. Active Directory证书服务
  13. 教您简单几步实现工业树莓派正确安装RS232转USB驱动
  14. 读书篇:《细说PHP》四、数组
  15. php两个手机号正则表达式_php中手机号码正则表达式代码
  16. 遥感植被指数128个
  17. android 高德地图 logo,Android高德之旅(3)UI Setting
  18. python 打开pdf文件_用python操作PDF文件
  19. 视频怎么制作动图?教你一招视频gif制作的方法
  20. Windows 11 全新 4K 壁纸发布

热门文章

  1. 云计算机是什么原理,云电脑的运行原理是什么?
  2. 微信小程序解包wxappUnpacker-master 样式解不出来 SyntaxError: Unexpected end of input 的解决方式
  3. 为何亚马逊的中国电商之路以失败收场?当当网创始人这样说
  4. android小程序-电子钢琴-滑动连续响应
  5. 【UV打印机】RYPC打印软件教程(七)-PCS说明(上)
  6. qlv转换成mp4只有声音 没有图像没有画面 解决方法
  7. php 用户名长度,Discuz! X2修改注册用户名长度限制解决方案
  8. 【云原生】这么火,你不来了解下?
  9. mvc 框架ember.js的简单介绍
  10. Android屏幕自适应