..
LibreOJ β Round #2
A. 模拟只会猜题意
按照题意模拟即可。
时间复杂度 $\mathcal O(n^2 + m)$。
B. 贪心只能过样例
记 $f_{i, j}$ 表示考虑前 $i$ 个数 $S$ 能否取得 $j$。
枚举第 $i$ 个数的值进行转移,时间复杂度 $\mathcal O(n^5)$。
使用 std::bitset
优化到 $\mathcal O(\frac{n^5}{w})$。
C. DP 一般看规律
答案一定不会变大。
每次 $x \rightarrow y$ 相当于合并 $x$ 和 $y$ 的集合,合并时每个点只会与其前驱后继产生贡献,所以可以用启发式合并 std::set
实现。
时间复杂度 $\mathcal O(n \log^2 n + m)$。
注意特判 $x = y$ 的情况。
D. 计算几何瞎暴力
对于有序的部分使用字典树维护,对于无序的部分使用前缀和维护,注意前缀和需要拆位。
对于异或操作使用全局异或标记,注意在末尾添加数时要异或标记。
时间复杂度 $\mathcal O((n + m) \log n \log v)$,空间复杂度 $\mathcal O(n \log^2 v)$。
E. 数论只会 GCD
不会。
F. 数学上来先打表
可持久化启发式合并。
数据结构合并复杂度是均摊的,撤回操作导致了复杂度不严格。