【题解】CF1556E 差分 前缀和 ST表 RMQ

题目链接

\(c_i=a_i-b_i\) ,我们操作的目标即令所有的 \(c_i = 0\)

考虑一次操作的实际影响,选一个长度为 \(2k\) 的子序列对其进行 \(+1,-1,+1,-1...\)

trick:将正负性看作左 / 右括号进行括号匹配。

负数 \(x\) 看成 \(|x|\) 个左括号 ,正数 \(y\) 看成 \(y\) 个右括号 。

那么每次操作相当于选取形如 \(()()()()()()\) 这样的括号子序列删掉。

有解的充分必要条件为原序列也是合法括号序列。

那么对于合法性的判断,可以维护一个前缀和的区间 \(\min\),查询区间前缀和的最小值区间 \(l,r\) 有解的充分必要条件即 \(\max_{k\in [l,r]} (s[k]) < s[l-1]\)

接下来考虑最优解:

从前缀和与差分的角度,我们考虑进行 \(+1,-1,+1,-1...\) 的本质影响即选取 \(k\) 个不交的区间对其进行区间加,那么进行的最少操作次数即 \(s[l-1] - \min_{k\in [l,r]} (s[k])\)

代码记录

posted @ 2021-08-31 10:37  Themaxmaxmax  阅读(39)  评论(0编辑  收藏  举报