1 条题解

  • 0
    @ 2026-1-19 9:51:17

    将左括号看作 11,右括号看作 1-1

    先尝试判定。我们可以通过再次反转区间 [l,r][l,r] 来将 SS' 还原为 SS,此时 SS 的前缀和(记作 SiS_i)将变为:

    $$S_i=\begin{cases} S'_i & \text{if }i<l\\ 2S'_{l-1}-S'_i & \text{if }l\le i\le r\\ S'_i-2(S'_r-S'_{l-1}) & \text{if }r<i \end{cases}$$

    因为 SS 合法当且仅当 SS 的前缀和均非负且 SN=0S_N=0,于是 r<ir<i 时的 SiS_i 可以改写为 SiSNS'_i-S'_N 而不影响充要性。于是限制只有四条:

    • i<li<lSi0S'_i\ge 0
    • lirl\le i\le rSi2Sl1S'_i\le 2S'_{l-1}
    • r<ir<iSiSN0S'_i-S'_N\ge 0
    • SN=2(SrSl1)S'_N=2(S'_r-S'_{l-1}),即 Sr=Sl1+12SNS'_r=S'_{l-1}+\frac{1}{2}S'_N

    那么判定一个 SS' 是否合法就只需要判定是否存在 [l,r][l,r] 使得 SiS'_i 满足上述条件即可。

    感觉上第一条和第三条限制是比较好处理的,所以接下来我们将直接讨论 SiS'_iSiSNS'_i-S'_N 内是否存在负数。

    两者内部都不存在负数

    那么这等价于 SS' 已经是一个合法括号串了,取 [l,r][l,r] 为空集即可。

    计数是平凡的。

    其中一者存在负数

    不妨假设是 SiS'_i 中存在负数,另一种情况可以简单的翻转并反转 SS'' 来计数。

    设首次出现负数的位置为 pp,那么必须有 lpl\le p,且由于 SiSNS'_i-S'_N 非负,我们只需考虑第二、四条限制。

    同时因为 SiSNS'_i\ge S'_N 且存在 Si<0S'_i<0,所以 SN<0S'_N<0,因此 Sr=Sl1+12SN<Sl1S'_r=S'_{l-1}+\frac{1}{2}S'_N<S'_{l-1}

    于是若 Sr0S'_r\ge 0,根据介值定理,我们一定能在 [l,p)[l,p) 内找到一个符合条件的 rr,取 Sl1S'_{l-1}[0,p)[0,p)SiS'_i 的最大值即可保证满足第二条限制;否则若 Sl1S'_{l-1} 不是最大值,取一个更大值 Sl1S'_{l'-1}[l,r)[l,r) 内一定也会存在一个符合条件的 rr',因此第二条限制也更容易满足。

    这就总结出我们的策略:一定是找到 [0,p)[0,p) 中最大的那个 Sl1S'_{l-1},再往后找到第一个 SrS'_r,校验 [l,r][l,r] 中的 ii 是否都满足 Si2Sl1S'_i\le 2S'_{l-1} 即可。

    枚举 pp,左半部分的计数是简单的,只需要记录一下最大前缀和。而 rr 要么在 pp 之前要么在 pp 之后,如果它在 pp 之前,就只需要 Sr0S'_r\ge 0;如果它在 pp 之后,就要求 Sp+1r2Sl1S'_{p+1\dots r}\le 2S'_{l-1},即 $S'_{p+1\dots r}-S'_N\le 2(S'_{l-1}-\frac{1}{2}S'_N)$,并且 SrSN=Sl112SNS_r-S'_N=S'_{l-1}-\frac{1}{2}S'_N,于是枚举 Sl112SNS'_{l-1}-\frac{1}{2}S'_N 后从后往前 dp,状态里记录一下有没有找到 rr 即可。

    两者内部都存在负数

    找到第一个 1-1 出现的位置 pp 和最后一个 1+SN-1+S'_N 出现的位置 qq。如果 pqp\ge q,那么同时有 1SN0-1-S'_N\ge 01+SN0-1+S'_N\ge 0,矛盾,因此必然有 p<qp<q。第一、三条限制等价于 l<p<q<rl<p<q<r

    欸你发现简单地将 [0,p)[0,p) 中的最大值作为 Sl1S'_{l-1} 行不通了,因为可能找不到对应的 SrS'_r,但是可以发现如果此时找不到 SrS'_r 就说明 Sl1+12SN>maxSq+1NS'_{l-1}+\frac{1}{2}S'_N>\max S'_{q+1\dots N},此时反过来取 SrS'_r(q,N](q,N] 中的最大值就有 Sr12SN<maxS0p1S'_r-\frac{1}{2}S'_N<\max S'_{0\dots p-1},于是可以找到对应的 Sl1S'_{l-1}。所以正着做一遍反着做一遍,然后减掉 $\max S'_{0\dots p-1}+\frac{1}{2}S'_N=\max S'_{q+1\dots N}$ 时算重的部分即可。

    剩下的部分就和上一个情况类似了,同样枚举 pp,右半部分新增一个阶段来记录有没有找到 qq 即可。

    总时间复杂度 Θ(N3)\Theta(N^3)。代码可以去翻我的 atc 提交记录。

    • 1

    信息

    ID
    8423
    时间
    5000ms
    内存
    1024MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者