Description
给定了一个长度为n的括号串,求经过每一个位置的合法子串的个数
Solution A
- 差分
因为一个合法串的贡献是使其所包含的串的ans得到含该串的方案数
所以差分即可
注意: 差分的增量和减量因为具有传递性(类似于递推),所以分开计算
Code A
1 |
|
Solution B
- 树形结构
注意,合法的括号序列是满足树形结构的
即,包含与被包含组成了父子关系
对于同层合法子串,如果是紧挨着,即可组成不同的方案数
所以
Code B
1 |
|
总结
差分
差分确实考的时候没有想到
突然感觉十分简单的样子
但这种较为复杂的差分确实让我GG
对于差分,重点在于贡献是连续的,如本题中,一个合法的括号序列给出的贡献是针对其内的括号序列(即其树形结构的子树)
因此,连续贡献(且具有离线性),可以差分处理树形结构
说实在做的时候没有想到它还有个名字
这种做法思路清奇,先考虑序列特性,即合法序列是被包围的
再来是考虑它是如何给出贡献的,即其和左右合法序列共同组成(被称作同层),和父亲序列给的贡献增量
玄啊