CF1446
题目都很有趣。
A
假设存在一个合法的,那么直接选。
否则所有数都小于 (frac{W}{2}),那么按任意顺序贪心选都是对的。
B
类比 LCS,设 (f_{i,j}) 表示 ([?,i],[?,j]) 的最大答案。转移是 naive 的。
C
观察:二进制最高位相同的会连在内部,所以最高位相同的 (>2) 的集合最多保留一个。
枚举保留谁,让内部生成树,不难发现最高位小于其的可以选一个,大于的每个可以选一个,然后递归,复杂度 (mathcal O(nlog wsim nlog^2 w))
D
观察:
- 当存在两个出现次数最多的元素时答案为 ([1,n])
- 否则最多的元素唯一,设为 (t),假设区间 ([l,r]) 内 (t) 不是出现次数的元素或之一,那么 ([l,r]) 一定不是答案。
枚举另一个出现次数最多的元素,设为 (b),将 (b) 出现的位置全设为 (-1),最多的元素全设为 (1),其余元素为 (0),那么区间合法的必要条件是权值和为 (0),这样可以更新一次答案。
观察:假设区间权值和为 (0) 但存在一个颜色出现次数更多,那么一定存在更大的答案。
于是得到了一个 (mathcal O(ccdot n)) 的做法。
考虑优化,对于出现次数大于 (sqrt{n}) 的元素考虑暴力做此算法。
对于出现次数小于 (sqrt{n}) 的元素,枚举区间内负数的权值和为 (w),那么 (w<sqrt{n}),对于此 (w) 暴力预处理 (t) 中所有合法的段 ([l_i,r_i])。
对于出现次数满足 (wle c_i<sqrt{n}) 的元素暴力枚举每个段 ([L,R]),找到合法的最优段即可(要分类讨论)
这里注意到假设颜色 (i) 有 (c) 个颜色,那么对复杂度的贡献为 (c^2),取 (c=sqrt{n}) 时得最大复杂度为 (mathcal O(frac{n}{sqrt{n}} imes n)) 即 (mathcal O(n^{1.5}))
E
好奇怪.svg
F
咕咕咕