首页 > 其他分享 >Henceforth

Henceforth

时间:2024-11-11 09:21:01浏览次数:1  
标签:begin end 子段 sum Henceforth bmatrix ans

区间所有子区间的最大子段和之和。

对 \(r\) 扫描线。维护 \([i,r]\) 的最大子段和,做个历史和。

考虑以 \(r\) 为右端点的最大子段和能更新的答案,对于一个区间 \([l,r]\),其能被更新仅当 \(sum_r-\min\limits_{i=l-1}^{r-1}sum_i>ans_l\) 即 \(ans_l+\min\limits_{i=l-1}^{r-1}sum_i<sum_r\)。

可证明 \(ans_l+\min\limits_{i=l-1}^{r-1}sum_i\) 前面这部分关于 \(l\) 递减。考虑答案组成是 \(\max_{j<i} sum_i-sum_j\),可简单放缩证明。

于是可以二分出这个 \(<\) 的分界线,修改为一段后缀。现在相当于要支持的操作是,区间赋值 \(a\),区间令 \(b=k-a\),区间查询 \(b\) 历史和。还有维护个区间 \(b\) 最小值。

维护矩阵 \(\begin{bmatrix}suma&sumb&hsum&len\end{bmatrix}\)。

区间赋值 \(a\) 即乘上

\[\begin{bmatrix}0&0&0&0\\0&1&0&0\\0&0&1&0\\k&0&0&1 \end{bmatrix} \]

区间令 \(b=k-a\) 即乘上

\[\begin{bmatrix}1& -1&0&0\\0&0&0&0\\0&0&1&0\\0&k&0&1 \end{bmatrix} \]

更新一次历史和即乘上

\[\begin{bmatrix}1& 0&0&0\\0&1&1&0\\0&0&1&0\\0&0&0&1 \end{bmatrix} \]

标签:begin,end,子段,sum,Henceforth,bmatrix,ans
From: https://www.cnblogs.com/Terac/p/18539084

相关文章

  • 【轻元】Henceforth - Orangestar/IA
    前奏原文译文あぁ君はもういないから啊你已经不在了私は一人歩いている唯有我踽踽独行あぁ腐るよりいいから啊比起郁闷还是好的行くあてもなく歩いている漫无目的地走着主歌1原文译文あぁこれからはそうだな啊以后也会是那样啊何......