#P14761. [Opoi 2025] CCD 的序列

[Opoi 2025] CCD 的序列

题目描述

以下关于括号序列和括号匹配的定义跟其他题没什么区别,知道的可以跳过。


括号序列是一个只包含 (\texttt{(})\texttt{)} 的字符串。

定义一个括号序列是合法的,当且仅当它为下列三种之一:

  1. 空串是合法的。
  2. 如果字符串 SS 是合法的,则 (S)(S) 也是合法的。
  3. 如果字符串 SSTT 是合法的,则 STST 也是合法的。

一个合法括号序列中,一个括号是另一个括号所匹配的括号,当且仅当两个括号之间是一个合法的括号序列,且两个括号方向相反。可以证明,一个括号所匹配的括号是唯一的。


定义一个括号的匹配发生变更当且仅当它所匹配的括号变更。

你有一个括号序列 SS。初始 SS 为空,下标从 11 开始

你要进行 nn 次操作,操作之间不独立

每次操作给你两个数 l,r(0lrS)l,r(0\le l\le r\le |S|),表示同时SSll+1l\sim l+1 之间插入左括号、往 SSrr+1r\sim r+1 之间插入右括号(llrr00 表示在开头插入,为 S|S| 表示在末尾插入,l=rl=r 时左括号插在右括号前面)。

可以证明,每次操作完后这个括号序列都是合法的。每次操作完后你需要求这次操作导致匹配发生变更的括号数(不包括新增加的两个括号)。

输入格式

第一行一个数,表示 nn

接下来 nn 行,每行两个数 li,ril_i,r_i,表示一次操作。

输出格式

nn 行,每行一个整数。第 ii 行表示第 ii 次操作导致匹配变更的括号数。

5
0 0
0 0
0 2
2 5
1 2
0
0
0
6
2

提示

样例解释

以下标红的表示新增的括号,蓝色表示当次操作导致匹配发生变更的括号。

  • 第一次操作后括号序列变为 ()\texttt{\red{()}}
  • 第二次操作后括号序列变为 ()()\texttt{\red{()}()}
  • 第三次操作后括号序列变为 (())()\texttt{\red(()\red)()}
  • 第四次操作后括号序列变为 ((())())\texttt{\blue{((\red())(\red))}}
  • 第五次操作后括号序列变为 ((()())())\texttt{(\red(\blue(\red)()\blue)())}

数据范围与约定

本题采用捆绑测试。

$$\def\arraystretch{1.2} \begin{array}{|c|c|c|} \hline \begin{array}{c} \tt{subtask}\\\hline 1\\\hline 2\\\hline 3\\\hline \end{array} & \begin{array}{c} n\\\hline \le 10\\\hline \le 10^{3}\\\hline \le 2\times10^{5}\\ \end{array} & \begin{array}{c} \tt{pts}\\\hline 20\\\hline 30\\\hline 50\\\hline \end{array} \\\hline \end{array}$$

对于所有数据,0n2×1050\le n \le 2\times10^{5}i[1,n],0li,ri2×i2\forall i \in [1,n],0\le l_i,r_i\le 2\times i-2