好玩的数据结构qwq

从2024.7.29开始记录。代码不放可能是因为我没写。

1. P7470 [NOI Online 2021 提高组] 岛屿探险

我们可以发现这个东西可以拆成很多个子问题,然后累计合并,这个东西可以使用线段树合并来做。

先考虑 \(b_i > d_j\) 的情况。那么答案就是 \(\sum [a_i \oplus c_j \le d_j]\)。我们把 \(a_i\) 插入 \(01 \text{trie}\) 中。然后我们从上往下走,走到深度为 \(h\) 的节点,那么代表他的值等于 \(c_i \oplus d_j\) 的前 \(h\) 位。然后我们考虑第 \(h + 1\) 位。

  • \(d_i = 0\),那么 \(a_i\)\(c_j\) 的第 \(h + 1\) 位必须相等,否则 \(a_i \oplus c_j > d_j\),然后直接往这个方向走即可。

  • \(d_i = 1\),那么此时 \(a_i\)\(c_j\) 的第 \(h + 1\) 位任意取都行。那么就有两种可能:

    • 如果 \(a_i\)\(c_j\) 的第 \(h + 1\) 位不一样,那么此时 \(a_i\) 依然等于 \(c_j \oplus d_j\),所以我们向这个方向继续走即可。
    • 如果 \(a_i\)\(c_j\) 的第 \(h + 1\) 位一样,那么此时 \(a_i \oplus c_j\) 就会一定小于 \(d_j\) 了,那么对于答案的贡献就是这个子树里 \(a_i\) 的个数之和。

这一部分就是 CF817E。比较简单。

接下来我们考虑 \(b_i \le d_j\) 的情况。这一个部分比较困难。但是我们发现这一个部分和 \(a_i \oplus c_j \le d_j\) 的结构很像,所以我们可以考虑类似的操作。

前面的是对于 \(a_i\) 扔到 \(01 \text{trie}\) 上然后查询 \((c_j,d_j)\),那么我们这次就可以把 \(c_j\) 扔到 \(01 \text{trie}\) 上,然后记录每一个 \((a_i,b_i)\) 对于 \(c_j\) 的贡献。

具体的我们只需要把 \(c_j\) 离线下来,然后对于 \((a_i,b_i)\) 查询,但是唯一的区别就是在上面我们遇到了一个节点满足 \(a_i \oplus c_j < d_j\) 时我们加上的是子树里 \(a_i\) 的个数和,而现在我们要在这一个子树打一个标记,让整一个子树全部都加上 \(1\),然后统计答案是就是从根到 \(c_j\) 路径上的标记和。

当然我们不能每一次都建 \(2\)\(01 \text{trie}\),但是那样子的复杂度爆炸,无法接受。

然后我们考虑如何优雅的计算多组数据。

首先我们将 \((a_i,b_i)\)\((c_j,d_j)\) 按照 \(b_i,d_j\) 升序排列。然后那双指针进行维护。此时我们开两个 \(01 \text{trie}\)。然后当我们扫到了第 \(j\) 个问题不满足 \(b_j > d_j\)\(a_i\) 从维护第一个 \(01 \text{trie}\) 中删除,然后计算贡献。同时对于满足条件的 \((a_i,b_i)\) 加入维护第二个情况的 \(01 \text{trie}\) 上并且计算贡献。

当然此时两个指针都往右移动。

2.The Third Grace

*3200。首先你需要知道 KTT,不会的话请做 P5693。


考虑 dp。我们定义 \(dp_i\) 为我们最后一个激活的点为 \(i\) 的最大权值,但是其中不包括 \(i\) 的贡献。

应为我们不会算当前点的贡献,所以我们可以增加一个虚点 \(m + 1\),那么答案就是 \(dp_{m + 1}\)

然后我们考虑如何转移。

我们枚举下一个激活的点的位置。因为我们现在加的是 \(i\) 对于答案的贡献,那么 \(dp_j = \max(dp_j,dp_i + \sum_{l = 1}^n \sum_{r = 1}^n [l \le i \le r < j] \times p_i)\)

然后扫描线一下,对于所有的 \(x\) 维护所有 \(y\) 的贡献,最后取 \(\max\) 即可。

接着我们发现贡献的式子是一个一次函数 \(y_i = k_i x_i + b_i\)。那么我们需要维护三种操作:

  • 全局求 \(\max(y_i)\)

  • 对于一个区间 \([l,r]\),让里面的所有 \(x_i\) 都加上 \(1\)

  • 单点修改 \(b_i\)

我们用 KTT 来维护这些一次函数,时间复杂度为 \(\mathrm O(m \log^3 m)\)

posted @ 2024-07-29 11:26  sqrtqwq  阅读(5)  评论(0编辑  收藏  举报