操作最大子段和(线段树简单(毒瘤)操作,计算几何,差分约束)

题意:
一次操作可以将序列中一个位置的值 − − --
求 对于 1 ≤ i ≤ K 1\leq i \leq K 1iK i i i次操作能造成的最小的最大子段和, 的和。

序列长度 n ≤ 1 e 5 n\leq 1e5 n1e5 K ≤ 1 e 13 K \leq 1e13 K1e13

问题转化:
假设最大子段和为 x x x
那么对于 i < j i<j i<j连边 ( i → j ) (i\rightarrow j) (ij)权值为 x x x
对于 ( i → j ) (i\rightarrow j) (ij)连边权值为 a i a_i ai
那么 1 1 1 n + 1 n+1 n+1的最短路,由差分约束系统可以知道。
就是满足方程组:
d i + 1 ≤ d i + a i d_{i+1} \leq d_i + a_i di+1di+ai
d j ≤ d i + x ( i < j ) d_j \leq d_i + x(i<j) djdi+x(i<j)
d n + 1 d_{n+1} dn+1的最大值 f ( x ) f(x) f(x)
那么 ∑ a i − f ( x ) \sum a_i - f(x) aif(x)次操作能造成的最小的最大子段和就是 x x x
并且最大子段和为 x x x时的最少操作次数是 ∑ a i − f ( x ) \sum a_i - f(x) aif(x)
最小的最大子段和 ≥ x \geq x x的最小序列总和是 g ( x ) = f ( x + 1 ) − 1 g(x) = f(x+1)-1 g(x)=f(x+1)1
因为后文会提到的原因,我们暂且不考虑 x < 0 x \lt 0 x<0的情况。
那么 x > 0 x>0 x>0的答案就是 ∑ x = 1 原 序 列 最 大 子 段 和 ∑ i = 1 K [ ∑ a − i ≥ g ( x ) ] \sum_{x=1}^{原序列最大子段和}\sum_{i=1}^K[\sum a - i\geq g(x)] x=1i=1K[aig(x)]
(这个,如果 i i i次操作能达到的最小的最大子段和为 t t t,那么 [ ∑ a − i ≥ g ( x ) ] [\sum a - i\geq g(x)] [aig(x)]会在 x ∈ [ 1 , t ] x\in [1,t] x[1,t]的时候 = 1 =1 =1,刚好计算 t t t遍也就是我们需要他造成的贡献。)
那么如果我们能够得到一个好看的 g ( x ) g(x) g(x

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值