A
二分答案,每个数去找范围内最左边的。
B
相同的数不会交换,所以设 \(f_{i,j,k,u}\) 为到 \(i\),有了 \(j\) 个 0
,\(k\) 个 1
,当前位置是 \(u\) 的最小代价,转移是暴力的,如果一个数要去前面,那么最优的方案一定不会把他往后面换,所以两次移动只有一次贡献,最终的答案要除以 \(2\)。
C
首先有双指针的暴力,然后基于这个就可以在线段树上合并了。
D
首先有最大值固定的一个部分分,这一档使用 trie
树,然后经典问题找最大值覆盖的所有区间,每次去遍历小的那一半就是 \(\mathcal{O}(n\log n)\),然后还是用部分分的思路,但是只能以固定区间的数作为节点点,所以上可持久化 trie
树,时间复杂度 \(\mathcal{O}(n\log n\log a)\)。