关于此题的一个奇怪的做法
查看原帖
关于此题的一个奇怪的做法
160839
Prean楼主2021/11/9 21:58

这不是讨论区题解

转化一下,相当于计算所有子序列的和减去所有子序列中被删除的元素的和

前者很好算,后者枚举一个 (l,r)(l,r) 表示 ll 是一个 + a[l]rr 是一个 -

然后在这个区间以外的大于 a[l]a[l] 的元素和 - 随便选,小于的需要满足 [1,l)[1,l) 中的每个元素都能和 [1,l)[1,l) 中的一个 - 匹配,(l,r)(l,r) 同理

我们将小于 a[l]a[l] 的元素看做左括号,- 看做右括号,上面的过程相当于求一个区间中有多少个合法的子括号序列

对于一对可能匹配的括号对 [l,r][l,r],连接 (l1,r)(l-1,r),询问 [l,r][l,r] 的答案相当于求出只保留小于 a[l]a[l] 的元素,l1l-1rr 的路径条数

很容易知道这是一个 DAG,于是排序建出这个 DAG,由于源点固定,所以可以直接暴力统计路径条数

求证这个做法有没有假/kel

2021/11/9 21:58
加载中...