随笔分类 -  算法基础——二分查找

摘要:P3382 【模板】三分法只有一个地方在这个题当中,f(mid)>f(mid-eps)比f(mid)-f(mid-eps)>eps精度要高 #include <bits/stdc++.h> #define inf 2333333333333333 #define N 10010 #define p( 阅读全文
posted @ 2020-10-13 21:05 WeiAR 阅读(103) 评论(0) 推荐(0) 编辑
摘要:https://vjudge.net/contest/367072#problem/C套娃题qwq 第k个位置它肯定会在一个区间里,[1234567891011][123456789101112],这样是两个区间先确定第k位所在区间的最大的数是几位数,比如这个区间[123456789101112]就 阅读全文
posted @ 2020-04-08 21:41 WeiAR 阅读(496) 评论(0) 推荐(0) 编辑
摘要:https://codeforces.com/contest/1301/problem/B如果填的这个数特别大,显然不优,如果数特别小,也不优,所以它是凸函数,可以二分(整数单峰函数二分模板题 #include <iostream> #include <cstdio> #include <queue 阅读全文
posted @ 2020-03-20 15:45 WeiAR 阅读(263) 评论(0) 推荐(0) 编辑
摘要:https://vjudge.net/problem/Gym-102141E 用set乱搞 阅读全文
posted @ 2019-07-31 15:23 WeiAR 阅读(128) 评论(0) 推荐(0) 编辑
摘要:https://vjudge.net/problem/2198220/origin枚举等差数列第一个和第二个,然后二分确定数列后面是否存在,复杂度比较玄学,卡过了。 也可以dp做,f[j][i]=max(f[j][i],f[i][pre]+1);f[j][i]表示j是等差数列最后一个下标,i是倒数第 阅读全文
posted @ 2019-07-16 20:16 WeiAR 阅读(911) 评论(0) 推荐(0) 编辑
摘要:洛谷P1372 又是毕业季I 对于答案a,k*a是最接近n的,即a=n/k(下取整),所以直接输n/k即可。 我的方法是 二分查找 n/k真的没有想到唉。 我找的最大公约数,如果当前的mid对应的个数比k大,就往大了找,否则往小里找,对于边界问题,要加一些特判。 阅读全文
posted @ 2017-08-23 08:28 WeiAR 阅读(100) 评论(0) 推荐(0) 编辑
摘要:关于二分查找的边界问题 二分查找首先要满足单调性,对于这种方式,l==r,l是第一个大于差找位置的位置,举例, 在1 2 3 4 5中查找3,l==r==4,根据需要输出l或l-1. 阅读全文
posted @ 2017-08-18 10:43 WeiAR 阅读(1057) 评论(0) 推荐(0) 编辑
摘要:codevs线段覆盖5 离散化+二分查找,按右端点排序,f[i]代表1~i的满足不覆盖的最大值,对于第i条线段,要么选,要么不选,所以方程为f[i]=max(f[i-1],f[find(i)]+e[i].v);find(i)是从右往左数第一个与i不相交的线段的下标,ans为f[n]; 阅读全文
posted @ 2017-08-18 10:16 WeiAR 阅读(142) 评论(0) 推荐(0) 编辑