题意
有两个括号序列
{
A
n
}
,
{
B
m
}
,
A
i
,
B
i
∈
{
\{A_n\},\{B_m\},A_i,B_i\in\{
{An},{Bm},Ai,Bi∈{(
,)
}
\}
},这两个括号序列不一定合法。现在,我们想要归并这两个序列,得到一个新的序列
{
C
n
+
m
}
\{C_{n+m}\}
{Cn+m}(所谓归并,就是说每次将
{
A
}
\{A\}
{A}或
{
B
}
\{B\}
{B}中的第一个元素删去并加入新序列
{
C
}
\{C\}
{C}的末尾,直到
{
A
}
,
{
B
}
\{A\},\{B\}
{A},{B}均为空)。这样的序列依然可能不合法。我们再在其中插入一些括号,使得
{
C
}
\{C\}
{C}合法。你的任务就是找到一种归并方法,使得最后一步中插入的括号最少。
T ≤ 10 , n , m ≤ 1 0 6 T\leq10,n,m\leq10^6 T≤10,n,m≤106
题解
把左括号看为 − 1 -1 −1,右括号看为 1 1 1,问题在于如何求排成的括号序列的最大的前缀最小值。
注意到这里的限制在于 A A A和 B B B只能分别顺序取,即限制关系构成两条链。此时应该联想到一个经典问题:有一颗操作树,每次只能选没有父亲的节点,每选一个节点会先减掉 a a a,再加上 b b b,求该过程的最大的前缀最小值。直接套上这个做法即可:按照 a a a和 b b b的大小关系把节点分为两类,先取 a < a< a<b的,每次取出最优的节点把与父亲合并代表父亲选完之后立即选它,用并查集维护即可。本题中由于值域在 1 e 6 1e6 1e6级别,可以用 v e c t o r vector vector代替堆以省掉一个 l o g log log。