省选模拟45
A.
考虑给整个矩阵按照每行为一个字符串建出一颗trie树,然后给每个节点存一下出现在第几行就可以统计答案。
考虑如何得到整个矩阵的答案,那么接下来要做的就是将trie的第一层节点删掉,这个东西可以简单地用trie树合并实现,在合并的过程中维护答案即可。
用splay启发式合并的复杂度似乎更加优秀,但是并不知道为什么。
B.
看到与运算就能想到按位处理,然后发现对于一个端点来说不同的结果只有log种。
于是维护这log个位置就行了,然后将询问离线,在右端点处处理所有的询问。
然后就对应了区间修改,区间查询,直接维护就行。
C.
考虑枚举最大值出现的位置,然后只要得到从前向后出现$a-1$个特殊点,后面出现$b-1$的方案数就可以统计答案。
然后发现这个东西可以简单dp,于是将状态转移方程写出来之后发现就是第一类斯特林数。
于是答案就是$\sum\limits_{i-1}^n s(i-1,a-1) s(n-i,b-1) C(n-1,a-1)$。
考虑这个东西的实际含义,就是一共选出来$a+b-2$,并且前$a-1$个环和后$b-1$个环不等价的方案数。
所以答案就是$s(n-1,a+b-2)*C(a+b-2,a-1)$。
然后只要求出来一行斯特林数即可,直接倍增就行了。