二分算法
ACM下二分专栏
YUK_103
随缘更新
展开
-
[二分答案]路标设置
传送门其实与跳石头无异上代码#include <cstdio>int len,n,k;int a[100010];int l,r;bool check(int llen){ register int i; int cnt = 0;//记录当前距离需要添加多少个路障 /* 假设当前为0 101两个路障,当前llen为51 需要添加的路障数为(101-0)/51 = 1 如果llen为50 需要添原创 2020-08-19 23:08:27 · 223 阅读 · 1 评论 -
[二分查找/二分答案]寻找第一个比给定数字大/小的数字
比给定数字小的int bin_search(int key){ int l,r; l = 1; r = 5; int mid; while(l<r) { mid = (l+r)>>1; if(a[mid] >= key) r = mid-1; else l = mid; } return l;}比给定数字大的in原创 2020-08-18 16:49:48 · 766 阅读 · 0 评论 -
[二分查找/二分答案] A-B数对
传送门本题思路写代码的时候顺手放进去了这里稍微补充一些首先数据100%的时候为2*10^5,数据过大两层循环可能存在超时,而常规思路就是两层for循环找答案,放弃该思路我们先行排序,然后从大到小循环一遍,当前数字减去m后所得到的值是固定的,只需要查找数组中有多少个数字符合条件即可时间复杂度O(nlogn)上代码#include <cstdio>#include <algorithm>using namespace std;#define scnaf sca原创 2020-08-18 15:46:07 · 324 阅读 · 0 评论 -
[二分答案]和为给定数
描述给出若干个整数,询问其中是否有一对数的和等于给定的数。输入共三行:第一行是整数n(0 < n <= 100,000),表示有n个整数。第二行是n个整数。整数的范围是在0到10^8之间。第三行是一个整数m(0 <= m <= 2^30),表示需要得到的和。输出若存在和为m的数对,输出两个整数,小的在前,大的在后,中间用单个空格隔开。若有多个数对满足条件,...原创 2020-05-02 01:38:33 · 595 阅读 · 0 评论 -
[二分答案]河中跳房子
描述每年奶牛们都要举办各种特殊版本的跳房子比赛,包括在河里从一个岩石跳到另一个岩石。这项激动人心的活动在一条长长的笔直河道中进行,在起点和离起点L远 (1 ≤ L≤ 1,000,000,000) 的终点处均有一个岩石。在起点和终点之间,有N (0 ≤ N ≤ 50,000) 个岩石,每个岩石与起点的距离分别为Di (0 < Di < L)。在比赛过程中,奶牛轮流从起点出发,尝试到...原创 2020-05-02 01:33:33 · 455 阅读 · 0 评论