Luogu7044 「MCOI-03」括号
题意:定义一个括号串的
在某次操作中,可以添加或删除一个括号。
定义一个括号串的
现在你需要求出一个长度为
首先考虑如何求出某个括号串的
显然,将该括号串中的括号对尽力抵消,最终会剩下 )))((
的形式,此时操作次数即为剩下的括号个数。
设子串
具体地,考虑
可以对左右端点分别考虑。对于左端点,方案数为在长为
于是可以写出答案:
考虑序列扫描线,在逐渐增大
当在末尾加入一个括号时(
当
,若加入 则 ,若加入(
则当
,若加入 则 ,若加入(
则
综上,只有
于是,使用线段树维护
然而这个做法还是太过丑陋了……
从右到左匹配,记录每个右括号匹配到的左括号。
当
这就容易