2025.7.9NOIP模拟赛2

T3:

题目大意:

定义一种新型数据结构,让每个 \(i\) 都记录一个 \(L_{i}\),然后要动态维护 \(\sum_{j = L_{i}}^{i} a_{j}\),可以支持单点加,前缀求和的操作。

  1. 单点加,假设将 \(x\) 这个位置增加 \(y\),那么要对所有 \(L_{i} \le x \le i\)\(i\) 的值做修改。
  2. 前缀求和,假设查 \(\sum_{i = 1}^{x}\),那么维护一个指针,初始指向 \(x\),设当前在 \(p\),那么跳到 \(L_{p} - 1\),跳到 0 时结束。

现在给定 \(n\) 和两个序列 \(a, b\),分别表示会在第 \(i\) 个位置单点加 \(a_{i}\) 次,以及 \(b_{i}\) 次前缀查。
问要怎样设计 \(L\),才能使总修改量最小?(指的是指针的修改和值的修改的综总和)
\(n \le 5000\)

赛时思路:

考虑对于一个位置,假设指针从他跳到 \(0\)\(cnt_{i}\) 步,那么他的 \(L_{i}\) 的 cnt 肯定在 \(L_{i}~i\) 中是唯一的最小值。
但这个题一是数据范围不算太大,二是没有一个能保证正确性的贪心策略,所以我们考虑 dp。
但 dp 好像也无法快速的记录状态。。。

解题思路:

考虑线性 dp 是不好做的,因为假设 \(L_{i} = j\),那么 \(j + 1 \sim i\) 这段区间的贡献不好算。
那么我们考虑区间 dp。
\(dp_{i, j}\) 表示将区间 \(i \sim j\) 的 ”指针“ 只需跳到 \(i - 1\),再加上修改的次数的最小值。

由于有上面那条”没有用“的性质,我们可以得到一个非常有用的事实:假设 \(i \le k \le j\) 是最后一个一步跳到 \(i - 1\) 的点,那么 \(k \sim j\) 一定是会经过 \(k\) 的!
那么我们可以将 ”深度和“ 转化成 ”子树和“,也就是 \(k -> i - 1\) 这条边会将 \(k \sim j\) 都贡献一遍,那么加上 \(\sum_{l = k}^{j} b_{l}\)
然后由于这样会让修改 \(i \sim k\) 时都修改 \(k -> i - 1\) 这条边,所以还得加上 \(\sum_{l = i}^{k} a_{l}\)

那么就有一个 \(O(n^3)\) 的式子:

\[dp_{i, j} = \min_{k = i}^{j} dp_{i, k - 1} + dp_{k + 1, j} + \sum_{l = k}^{j} b_{l} + \sum_{l = i}^{k} a_{l} \]

然后你设 \(w_{i, j, k}\)\(\sum_{l = k}^{j} b_{l} + \sum_{l = i}^{k} a_{l}\)
\(wa_{i, k}\)\(\sum_{l = i}^{k} a_{l}\)\(wb_{j, k}\)\(\sum_{l = k}^{j} b_{l}\)

那么 \(w_{i, j, k} = wa_{i, k} + wb_{j, k}\),然后由于 \(wa\)\(wb\) 都满足四边形不等式,所以你认为 \(w\) 也满足四边形不等式(((

决策单调性优化可以变成 \(O(n^2)\)

T4:

题目思路:

给定 \(n\) 和序列 \(a, b\) 和一个字符串 \(s\)
初始有一个数 \(x = 0\),现在要对于每个 \(i\) 从一到 \(n\):将 \(x\) 异或 \(a_{i}\)\(b_{i}\)
然后 \(s_{i} = 0\) 表示第 \(i\) 步的人希望最终的值小,否则希望最终的值大。
\(n \le 2 \times 10^5\)

解题思路:

异或是个很厉害的东西。

首先,我们可以将 \(c_{i} = a_{i} ⊕ b_{i}\),那么先将 \(x = ⊕_{i = 1}^{n} a_{i}\),那么问题就变成了选/不选 \(c_{i}\)
由于是二进制最值问题,我们从高位到低位去考虑。
假设最后一个第 \(i\) 位为 1 的位置是 \(p\),那么显然 \(p\) 是可以直接对答案的第 \(i\) 位影响的。

但前面第 \(i\) 位为 1 的二进制位也可以对 \(p\) 做影响!!

先考虑前面只有一个第 \(i\) 位为 1 的数。
假设前面的数为 \(x\)\(c_{p} = y\),且第 \(p\) 手的人一定要选 \(c_{p}\)(不选同理)。
那么如果 \(x\) 选,那么 \(y\) 不选;如果 \(x\) 不选,那么 \(y\) 选。
也就是 \(x,y\) 中只能选一个!!
那么我们将 \(y\) 给选入,删掉,并将 \(x ⊕ y\) 替换掉 \(x\)
这样不仅没有改变问题,而且将 \(x\) 的第 \(i\) 位消掉了!!

但如果有多个数呢?
不会有影响!!!因为 \(x ⊕ y ⊕ y ⊕ z = x ⊕ z\)!!!
这样 \(y\) 还是没选,异或的性质!!!

那么直接把所有的第 \(i\) 位为 1 的数都异或上 \(c_{p}\),就可以递归做下去了!
\(O(n \log V)\)

也是一道配得上 74 人场切的 *2900 了,感觉很有意思,而且和 CF2071D2 都是异或性质灵活运用的题了。

posted @ 2025-07-09 20:20  positive_deviation  阅读(34)  评论(0)    收藏  举报