随笔分类 -  算法-二分

摘要:退役后智商恢复 and 底层码农防失业。 阅读全文
posted @ 2022-01-26 22:58 duyiblue 阅读(400) 评论(3) 推荐(1) 编辑
摘要:考虑查询一段区间 [l,r] 里线段并的长度怎么做。可以枚举右端点,维护左端点的答案。同时对数轴上每个位置,记录最后一个覆盖到它的线段编号,用 set 维护数轴上的这些线段。加入一条新线段时,要更新答案,相当于对一段左端点的答案做区间加。回到本题,可以二分价值第 k 大的区间的价值,然后求价值大于等于 mid 的区间数量,做法和上面类似 阅读全文
posted @ 2021-02-15 16:38 duyiblue 阅读(907) 评论(1) 推荐(2) 编辑
摘要:考虑实现一个核心函数:求出某个后缀,花费不超过 c 时,字典序第 k 小的结果序列,的第一次操作。实现这个函数后,通过调用不超过 c 次该函数,可以求出答案。我们对后缀做一些预处理,就可以快速实现这个核心函数。预处理需要观察一些性质,然后用 deque 实现。 阅读全文
posted @ 2021-01-11 13:57 duyiblue 阅读(752) 评论(1) 推荐(5) 编辑
摘要:很神的数据结构题!!!先做前缀和等初步转化,可以变成关于两个序列、区间最大、最小值的问题。枚举 r,用单调栈维护出使其中一个序列合法所需要做的操作。对另一个序列,可以贪心地在区间端点处进行操作。找出最小的、合法的区间端点,可以在线段树上二分。但这个线段树维护的信息比较特殊,要用到类似于《楼房重建》这题里,log^2 线段树的技巧。 阅读全文
posted @ 2021-01-05 14:30 duyiblue 阅读(358) 评论(7) 推荐(3) 编辑
摘要:分析问题性质,容易得到一个 O(n^2) 做法。考虑对每个 Alice 的起点二分答案。换成整体二分,每次建虚树,在虚树上树形 DP,即可做到 O(n log^2 n)。注意要判断一个节点到 Alice 和 Bob 距离相等的情况,比较复杂。 阅读全文
posted @ 2020-11-25 21:03 duyiblue 阅读(475) 评论(1) 推荐(1) 编辑
该文被密码保护。
posted @ 2020-09-23 20:47 duyiblue 阅读(49) 评论(1) 推荐(0) 编辑
摘要:可以证明,我们总能通过巧妙地安排删除顺序,使得所有“理论上能被删除的数”都被删掉。那么,对于前i个数里最多能删多少个,容易得到递推式 f(i) = f(i-1) + [i>=a(i) and f(i-1)>=i-a(i)]。区间询问。我们对每个i,预处理出使得它能被删掉时,前面最多ban掉多少个数。预处理可以二分+主席树求。询问可以直接在主席树上查询。 阅读全文
posted @ 2020-09-07 10:48 duyiblue 阅读(712) 评论(2) 推荐(0) 编辑
摘要:发现是求[ice的和]与[fire的和]的较小值的最大值。ice的和,是一个单调不下降的函数,fire的和,是一个单调不上升的函数。两者较小值的最大值,显然在它们相交的地方取到。二分相交的地方。用数据结构分别维护ice和fire,时间复杂度O(nlog^2n)。直接在线段树上二分,复杂度O(nlogn),但是常数较大。用树状数组上倍增的技巧代替线段树上二分,就可以了 阅读全文
posted @ 2020-06-26 19:43 duyiblue 阅读(619) 评论(1) 推荐(1) 编辑
该文被密码保护。
posted @ 2020-06-03 23:27 duyiblue 阅读(4) 评论(0) 推荐(0) 编辑
该文被密码保护。
posted @ 2020-06-03 22:13 duyiblue 阅读(7) 评论(0) 推荐(0) 编辑
摘要:通过二分答案转化为判定性问题。发现如果从前往后安排每一天,很难找到一种固定的贪心策略,来确定当天砍哪些竹子。换个思路,时光倒流!从后往前,每天竹子自己减少ai,我们一次操作将其拔高p。要保证每根竹子高度始终非负,且m天后最终高度大于等于hi。用小根堆维护每根竹子自己能坚持到哪一天(不变成负数),每次取出坚持天数最少的,将其拔高即可 阅读全文
posted @ 2020-05-18 09:03 duyiblue 阅读(442) 评论(8) 推荐(0) 编辑