随笔分类 -  二分

摘要:两个操作相当于区间加等差数列和求区间最大值,过于复杂,考虑分块。 对于每个块,我们记录 \(ad_j\) 表示这个块内每个位置共同的增量,记录 \(cd_j\) 表示这个块内整体加上的等差数列的公差。我们可以通过将部分等差数列的值转移到 \(ad_j\) 中去,这样每个位置的值就是: \[ans_i 阅读全文
posted @ 2025-05-03 09:40 长安一片月_22 阅读(23) 评论(0) 推荐(0)
摘要:这题一脸 01 分数规划的长相,考虑对答案进行二分。 设最大答案为 \(cmax\),则当 \((-x_ic+y_i)+(-p_jc+q_j)\ge 0\) 时,\(c\le cmax\)。不等式左半侧前后两个部分相互独立且解法相近,可以分别处理。我们只考虑 \(-x_ic+y_i\) 的最大值,这 阅读全文
posted @ 2025-04-20 16:02 长安一片月_22 阅读(16) 评论(0) 推荐(0)
摘要:首先正难则反,想到答案即为满足第一条要求的回文子序列数量,减去回文子串数量。回文子串数量 \(hash+\) 二分即可,考虑前半部分。 假如我们将一个回文子序列一层层剥开,就会发现它其实是由多个相同的字母对拼成的。那么容易想到把字母 \(a\) 和字母 \(b\) 的贡献分开计算。那第一条要求就可以 阅读全文
posted @ 2025-01-20 08:49 长安一片月_22 阅读(14) 评论(0) 推荐(0)
摘要:首先发现 \(p_x\times dis(x,y)+q_x\) 异常像是能斜率优化的样子,那先把求 \(f_x\) 的式子写出来(下设 \(d_x\) 表示 \(x\) 到根的距离): \[f_x=\min_{lca(x,y)=y,y\ne x}(p_x\times(d_x-d_y)+q_x+f_y 阅读全文
posted @ 2024-12-23 08:59 长安一片月_22 阅读(19) 评论(0) 推荐(0)
摘要:最小值最大,考虑二分答案,问题转为判断最小值是否能 \(\ge x\)。 假如 \(a_i\ge x\),那我们肯定不管;假如 \(a_i<x\),那最好能让选择的区间 \(r\) 值更大,用优先队列维护即可。区间增幅可以用树状数组维护。 时间复杂度 \(O(n\log^2n)\)。 #includ 阅读全文
posted @ 2024-11-10 16:53 长安一片月_22 阅读(12) 评论(0) 推荐(0)
摘要:俗话说的好,正难则反,既然不好想每一个子弹能打碎多少个木板,不如想每个木板被那枚子弹打碎。 然后就是显然的整体二分。由于可能木板不会被击碎,那些木板的分数会累加到最后一个子弹上,因此我们可以加一枚背锅弹,承担多余的分数。 时间复杂度 \(O((n+m)\log^2 m)\)。 #include<bi 阅读全文
posted @ 2024-05-04 10:51 长安一片月_22 阅读(15) 评论(0) 推荐(0)
摘要:发现实际上就是二维静态区间最大值,可以用整体二分维护。 时间复杂度 \(O((q+n^2)\log \max(a_{i,j})\log n^2)\)。 #include<bits/stdc++.h> #define ll long long using namespace std; const in 阅读全文
posted @ 2024-05-04 09:38 长安一片月_22 阅读(23) 评论(0) 推荐(0)