标签:保留 之一 time sqrt lin 假设 最优 出现 题目
题目都很有趣。
假设存在一个合法的,那么直接选。
否则所有数都小于 \(\frac{W}{2}\),那么按任意顺序贪心选都是对的。
类比 LCS,设 \(f_{i,j}\) 表示 \([?,i],[?,j]\) 的最大答案。转移是 naive 的。
观察:二进制最高位相同的会连在内部,所以最高位相同的 \(>2\) 的集合最多保留一个。
枚举保留谁,让内部生成树,不难发现最高位小于其的可以选一个,大于的每个可以选一个,然后递归,复杂度 \(\mathcal O(n\log w\sim n\log^2 w)\)
观察:
枚举另一个出现次数最多的元素,设为 \(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})\)
好奇怪.svg
咕咕咕
标签:保留 之一 time sqrt lin 假设 最优 出现 题目
原文地址:https://www.cnblogs.com/Soulist/p/13995746.html