杂题
题意
给定长度为\(n\)的序列\(\{a\}\),令一个长度为\(k\)的子序列\(\{a_{i_1},a_{i_2},\cdots,a_{i_{k-1}},a_{i_k}\}\),令其权值为\(\sum\limits_{j=1}^k sign(j)*a_{i_j}\)
对于\(i\in [1,n]\),求长度为\(i\)的子序列最大权值
\(n\in[1,10^5],a_i\in[-10^9,10^9]\)
做法
令\(C_{K}\)为某个长度为\(K\)的最优子序列
结论1:对任意\(C_{K},C_{K+2}\),\(\exists x,y\in C_{K+2}\backslash C_K\),使得\(C_{K+2}'=C_K\cup \{x,y\}\)(若权值定义为\(sign(i+1)\)也成立,将序列取反即可)
证明:
对\(K\)施归纳
\(K=0\)显然
\(K=1\):若\(C_K\subseteq C_{K+2}\)则选其他两个;否则可以选择一个\(i_2,i_3\)或\(i_1,i_2\)
考虑\(K>1\)
若序列中某个前缀或某个后缀(非平凡),\(C_{K+2}\)出现的数量为\(C_K\)的数量\(+2\),由于分割后另一部分权值显然相等,且这一部分通过之前的归纳的证
若不存在,则显然的情况会是出\(i_1,i_{K+2}\),其他位置是重合的,所以显然加上这两个即可
根据结论1,由于删去\(i_l,i_r\)对序列的影响为减去:\(sign(l)*a_{i_l}+2\times (\sum\limits_{j=l+1}^{r-1}sign(j)*a_{i_j})+sign(r)*a_{i_r}\)
对\(K\)降序按奇偶分别处理,直接用线段树反复维护即可