CF1446

CF1446

题目都很有趣。

A

假设存在一个合法的,那么直接选。

否则所有数都小于 \(\frac{W}{2}\),那么按任意顺序贪心选都是对的。

B

类比 LCS,设 \(f_{i,j}\) 表示 \([?,i],[?,j]\) 的最大答案。转移是 naive 的。

C

观察:二进制最高位相同的会连在内部,所以最高位相同的 \(>2\) 的集合最多保留一个。

枚举保留谁,让内部生成树,不难发现最高位小于其的可以选一个,大于的每个可以选一个,然后递归,复杂度 \(\mathcal O(n\log w\sim n\log^2 w)\)

D

观察:

  • 当存在两个出现次数最多的元素时答案为 \([1,n]\)
  • 否则最多的元素唯一,设为 \(t\),假设区间 \([l,r]\)\(t\) 不是出现次数的元素或之一,那么 \([l,r]\) 一定不是答案。

枚举另一个出现次数最多的元素,设为 \(b\),将 \(b\) 出现的位置全设为 \(-1\),最多的元素全设为 \(1\),其余元素为 \(0\),那么区间合法的必要条件是权值和为 \(0\),这样可以更新一次答案。

观察:假设区间权值和为 \(0\) 但存在一个颜色出现次数更多,那么一定存在更大的答案。

于是得到了一个 \(\mathcal O(c\cdot n)\) 的做法。

考虑优化,对于出现次数大于 \(\sqrt{n}\) 的元素考虑暴力做此算法。

对于出现次数小于 \(\sqrt{n}\) 的元素,枚举区间内负数的权值和为 \(w\),那么 \(w<\sqrt{n}\),对于此 \(w\) 暴力预处理 \(t\) 中所有合法的段 \([l_i,r_i]\)

对于出现次数满足 \(w\le c_i<\sqrt{n}\) 的元素暴力枚举每个段 \([L,R]\),找到合法的最优段即可(要分类讨论)

这里注意到假设颜色 \(i\)\(c\) 个颜色,那么对复杂度的贡献为 \(c^2\),取 \(c=\sqrt{n}\) 时得最大复杂度为 \(\mathcal O(\frac{n}{\sqrt{n}}\times n)\)\(\mathcal O(n^{1.5})\)

E

好奇怪.svg

F

咕咕咕

posted @ 2020-11-17 18:45  Soulist  阅读(127)  评论(0编辑  收藏  举报