给定一个包含’(’、’)’、’[’、’]'的字符串。
操作1:同种左括号变成右括号,反之亦可,花费0
操作2:方括号变成圆括号,反之不可,花费1
每次给出l,r,问把[l,r]变合法需要的最小代价,保证有解
字符串长度1e6,询问次数2e5
容易发现的结论:
1.合法的串等价于,任意两个同种括号间有偶数个异种符号
2.一对一对地消除后,剩下的非法部分是010101这样的
3.一种括号能完全消除,剩下的另一种自然也可以
通过3我们可以简化问题,只要考虑一种括号即好,结合规则,我们考虑把处理不掉的方括号删掉,即统计不能消掉的方括号数量。
我们从第一个方括号开始记,如果下一个括号出现在偶数个下标后(间隔奇数个异种),就没法消掉前面的一个,只能指望后面的人消回来。
如果一直消不掉,就会变成1,奇数,奇数,奇数
相对来说能消掉奇数的构成的就是偶数,偶数,偶数,…
所以答案就是二者的差的绝对值,事实上我们发现这两类是等价的,所以不必指定第一个方括号为奇数,简单按照原来的下标就可以了。
然后这东西就可以前缀和了。