8.25 Day9
75+100+35=210 rk2
T1
直接比较 \(a_{i-1}\) 和 \(a_i\)
如果 \(a_{i-1} < a_i\)限制了x的在他们的最高不同位必须是0
如果 \(a_{i-1} > a_i\)限制了x的在他们的最高不同位必须是1
分位考虑,开两个桶记录,直接暴力修改即可
时间复杂度:\(O(30n)\)
T2
暴搜优化
T3
55->35
没看见有个挡\(l_{max}<=200\)自己卡自己,少了20分
一个朴素的想法,设\(dp_i\)表示\(A_{1...i}\)的最小代价,转移就从前面\(dp_j(j<i)\) 转移,加上\(A_{j+1...i}\)的最小代价
关于最小代价,可以把B插入trie树,每个点记录min_c
时间复杂度:\(O(nl_{max})\)
考虑另一种转移:
枚举前后缀转移,考虑一个固定的\(𝐵_𝑥\),如果\(𝐵_𝑥 [:−𝑗]\)是\(𝐴[:𝑖]\)的后缀,则可以以代价\(𝑐_𝑥\) 从\(𝑑𝑝[𝑖−𝑗]\rightarrow 𝑑𝑝[𝑖]\)。同理,如果\(𝐵_𝑥 [:𝑗]\)是\(𝐴[𝑖:]\)的前缀,则可以以代价\(𝑐_𝑥\)从\(𝑑𝑝[𝑖]\rightarrow 𝑑𝑝[𝑖+𝑗]\)。
我们发现每一段\(𝑗\)都满足二分性质,在前后缀分别求出\(𝑗\)的合法范围,用线段树转移,复杂度\(𝑂(𝑚𝑛 log𝑚+𝐿)\)
将长度大于𝐾的用方法1,其余的用方法2,总复杂度为\(𝑂(𝑚 \frac{𝐿}{𝐾} \log 𝑚+𝑚𝐾)\)。
令\(𝐾=𝑂(\sqrt{𝐿 \log 𝑚})\),总复杂度为\(𝑂(𝑚\sqrt{𝐿 \log 𝑚 })\)