省选模拟11

T1:
设计f[i]表示乘积为i的子集有多少个,对于数x来说只能转移其倍数的位置
把相同的数放在一起考虑,就可以把复杂度降到(O(n+klnk))
正解是洲阁筛,不会。。。

T2:
显然给的是一棵字典树,那么LCS长度就是dep[lca(u,v)]
对于LCP,可以建出广义SAM,然后LCP的长度就是len[SAM_lca(u,v)]
如果按照parent树的dfs序将点插入线段树,那么显然相邻的点的LCP最大
那么就在原树上线段树合并就完了

T3:
只需要动态维护元素的大小关系就行了
考虑用两棵平衡树,元素分别为x和(x,y)
第一棵用来查排名,第二棵用来计算新节点的排名
复杂度(O(nlog^2n))
感觉如果用重量平衡树维护double权值的话应该能做到(O(nlogn))(类似后缀平衡树的想法)

原文地址:https://www.cnblogs.com/Gkeng/p/12730065.html