2 条题解

  • 1
    @ 2026-9-29 20:51:56

    lucky

    不难想到,括号匹配。

    令 4=′(′4='(', 7=′)7 = ')

    于是用 stack 维护,不难发现,其第几轮删除(匹配)是容易计算的。于是,最后我们按删除的顺序加贡献就行了。

    具体地,设匹配为 (l,r)(l, r) 其中 l<rl<r 且 ll 是左括号,则在令 f(x)f(x) 表示 xx 在第几轮删除(不删除为 00),则 f(l)=f(r)=(max⁡i=l+1i=r−1f(i))+1f(l) = f(r) = (\max_{i=l+1}^{i=r-1}{f(i)}) + 1。

    最后,按照删除的顺序遍历,维护每个括号位置删没删,发现这很简单。

    按顺序遍历

    //用 bit 维护 位置 i 有没有被删。
    
    for i in [1, n]
      for j in 在 i 删除的位置
          ans <- ans + j - Q(j) // 有几个被删掉就去掉几个。
      for j in 在 i 删除的位置
          add(j, 2) // 删掉 
    

    信息

    ID
    2768
    时间
    1000ms
    内存
    128MiB
    难度
    6
    标签
    (无)
    递交数
    16
    已通过
    9
    上传者