感觉此题难啊,数学还是太渣了,看了半天的题解才算明白了点儿。
给一个长度为n且仅由1和-1组成的序列ai, i = 1, 2, ..., n,每个位置都有另一个值vi,要求用某种方案将序列划分为m(0 < m < n)个非空连续子序列,使得所有子序列中和的最大绝对值最小,并且在所有满足上述条件的方案中划分位置的v[i]序列字典序最小。
记
、
记题目中说的和的最大绝对值的最小值为
有如下几个结论
证明:
这题思维难度很大,就算上面的结论猜到了,敢用了,想不出下面计算字典序最小的方案的算法也是没有用的。
对于并且
的情况,由于有且仅有前缀和为0的位置可选,我们仅需要维护一个单调队列,对第i个划分位置入队直到后面的前缀和为0的位置不足时为止,然后取出队中最小的即可。
对于其他情形,我们当前选择的位置受上一个位置限制。假设第个位置为
,给定另一个位置
,
可以作为第
个位置当且仅当
这个就有些难。我们对每个S值维护一个单调队列,得到第个位置
后,我们访问所有S值在
中的单调队列。
看起来是不是很暴力?似乎又要MLE又要TLE的样子?让我们仔细分析空间和时间复杂度,由于我们所有位置都最多入队一次,故空间复杂度为。因为
,总共选m次,故总的时间复杂度为
。
原文:http://www.cnblogs.com/jasonyu/p/hnoi_2013_travel.html