这不是讨论区题解
转化一下,相当于计算所有子序列的和减去所有子序列中被删除的元素的和
前者很好算,后者枚举一个 (l,r) 表示 l 是一个 + a[l]
,r 是一个 -
然后在这个区间以外的大于 a[l] 的元素和 -
随便选,小于的需要满足 [1,l) 中的每个元素都能和 [1,l) 中的一个 -
匹配,(l,r) 同理
我们将小于 a[l] 的元素看做左括号,-
看做右括号,上面的过程相当于求一个区间中有多少个合法的子括号序列
对于一对可能匹配的括号对 [l,r],连接 (l−1,r),询问 [l,r] 的答案相当于求出只保留小于 a[l] 的元素,l−1 到 r 的路径条数
很容易知道这是一个 DAG,于是排序建出这个 DAG,由于源点固定,所以可以直接暴力统计路径条数
求证这个做法有没有假/kel