摘要: 先说暴力。线段树维护 \(a_i - s_{i - 1}\),每次暴力 \(O(n \log n)\) 查找 \(0\) 的位置。 这会超时,考虑加个优化: 维护一个区间 max,在查询到的区间的 max 小于 \(0\) 时退出。 设 \(p\) 为修改的位置,\(x\) 为修改成的值。在修改时把 阅读全文
posted @ 2025-08-02 16:13 David9006 阅读(7) 评论(0) 推荐(0)
摘要: 我们的策略是:每一轮把所有按钮全按一遍,如果有一个按钮空了,就把它记录下来,下一轮不按它。 首先,先把 \(a\) 升序排序。记录一个 \(l\),表示在当前,位置 \(\ge l\) 的按钮都非空。 同时,只有 \(a_i < 0\) 了,第 \(i\) 个按钮才能不按。在 \(a_i = 0\) 阅读全文
posted @ 2025-08-02 16:13 David9006 阅读(10) 评论(0) 推荐(0)
摘要: 本文主要记录考场上可用的(玄学)技巧。 若有补充,欢迎在评论区留言。 I/O 优化 ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr) 可以关闭同步流,有时比快读快写更快。与文件读写共同使用时,需要在程序结尾加入 cout 阅读全文
posted @ 2025-08-02 16:12 David9006 阅读(25) 评论(0) 推荐(0)
摘要: 对于每个幼儿园维护婴儿 rating 的 multiset,再维护这些幼儿园最大 rating 的 multiset(设其为 \(M\))。 修改时: 如果要修改的婴儿 rating 为原来幼儿园中的最大值,就更新 \(M\)。 如果要修改的婴儿 rating 为新的幼儿园中的最大值,也要更新 \( 阅读全文
posted @ 2025-08-02 16:11 David9006 阅读(6) 评论(0) 推荐(0)
摘要: 注意到如下结论:区间 \([l, r]\) 满足题目条件当且仅当 \(a_l\) 第一次出现,且 \(a_r\) 最后一次出现。 证明:充分性显然,下面证明必要性。 若区间 \([l, r]\) 不满足上述条件,则我们可以找到在 \(a_l\) 左边与其相同的数与 \([l + 1, r]\) 拼起 阅读全文
posted @ 2025-08-02 16:11 David9006 阅读(7) 评论(0) 推荐(0)
摘要: 设 \(S = a_{n - 1} + a_n\),则根据题意有 \(S \le k + 1\)。又因为 \(a_{n - 1} \le a_n\),所以 \(a_{n - 1} \le \lfloor S / 2 \rfloor\)。 我们枚举 \(S, a_{n - 1}\),则每一种前 \(n 阅读全文
posted @ 2025-08-02 16:10 David9006 阅读(6) 评论(0) 推荐(0)
摘要: 设值域是 \(V\),且数列 \(B\) 单调不降。为了让最大值最小,\(B_1 = 0\),此时最大值为 \(\sum \limits_{j = 1}^{L - 1} B_{j + 1} - B_j\)。 把限制变一下形: 变形思路:把数列 \(B\) 放到数轴上。注意到,区间 \([B_j, B 阅读全文
posted @ 2025-08-02 16:10 David9006 阅读(6) 评论(0) 推荐(0)
摘要: 我的 MO 还是太菜了。 注意到,当 \(\dfrac AB < 1 < \dfrac CD\) 时,\(p = q = 1\)。 现在只需处理都是假分数和都是真分数的情况了。 若 \(1 < \dfrac AB < \dfrac CD\),我们想把它们变成真分数,所以令 \(k = \min \l 阅读全文
posted @ 2025-08-02 16:09 David9006 阅读(7) 评论(0) 推荐(1)
摘要: 先做一步转化,把 \(0\) 视作 \(-1\),这样就可以通过比较前缀和的大小来判断 \(0\) 多还是 \(1\) 多。 然后设 \(\Delta_i = \sum \limits_{j = 1}^i s_i\)。 那么我们要求的就是: \[\begin{aligned} \mathrm{Ans 阅读全文
posted @ 2025-08-02 16:07 David9006 阅读(10) 评论(0) 推荐(0)
摘要: 人类智慧,启动! 阅读全文
posted @ 2025-07-31 10:01 David9006 阅读(23) 评论(0) 推荐(0)