「考试」省选49

好恶心的题。
服了。

T1
对顶堆启发式合并。
维护出每一个节点的\(a[mid]\),和\(a[mid+1]\)即可。
最后\(dfs\)一次用树状数组维护后缀和即可快速的分情况统计答案。

T2
直接求\(g[d]\)表示\(gcd|d\)的子串个数。
然后单独在一个序列中的可以直接求出来。
因为最多只有\(log\)个取值,可以用求前缀与的方式进行链表操作,答案乘\(n!\)即可。
不需要考虑这种情况。
剩下的就是恶心的分类讨论。
对于每个序列和每一个\(d\)
都求出\(suf,all,pre\)三种序列。
结合一些组合计数和容斥的方法就可以求出最终的序列个数了。
得到\(g\)之后我们进行莫比乌斯反演或者补集容斥即可求出\(f[d]\),\(gcd=d\)的子序列个数。
直接统计答案即可。

T3
考虑到如果前\(i\)为相同。
相当于给值域和排名域分割,然后方案自然是一个组合数。
我们考虑这种分割最终的大小均为1。
那么在分割的时候我们利用启发式分裂进行分割即可。

posted @ 2020-03-18 21:54  Lrefrain  阅读(94)  评论(0编辑  收藏  举报