Description
给定 (m) 个区间,贡献就是区间内小于等于 (c_i) 的元素的最小值,不存在就是零。需要钦定每个点的值,最大化贡献和,输出方案。
Solution
最后的每个数的值只会是 (c_i) 中的某一个,所以对 (c) 离散化。而贡献又和区间有关,不好搞,但好在总区间很小,所以可以考虑区间 dp。(dp[l][r][k]) 表示只考虑是 ([l,r]) 的子集的区间,且区间最小值是 (k) 的最大贡献和。转移的话可以枚举最小值的位置,贡献就是跨过该点且 (c) 大于等 (k) 的区间个数再乘上 (k)(这一点其实是分治的思想,只考虑跨过中点的元素的贡献,然后剩下的进行递归)。记录一下后缀最大值可以快速转移,(O(n^3m))。
输出方案的话,考虑记下从哪儿转移来的。需要注意“从哪儿转移来的”的初始化,否则贡献都是零的话就会出错。