给出一个长度为 的括号序列和 种操作: 翻转某一个括号; 查询区间内完成括号匹配后第 个括号的原位置。
Constraints
Solution
易得,最后的序列一定形如 ‘)))(((’ ,即左段皆为 ‘)’,右段皆为 ‘(’ 。我们可以建出一棵线段树,线段树上的每个节点对应区间内匹配后左段 ‘(’ 的数量和右段 ‘)’ 的数量。
区间合并与修改显然,主要问题在查询。至此我们可以通过查询区间 的信息快速得到第 个括号的类型。因为 ‘(’ 在从右往左合并区间时单调不减, ‘)’ 在从左往右合并区间时单调不减,所以可以在线段树上边跑边查询。详见代码。
Code
1 |
|