省选模拟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)\)(类似后缀平衡树的想法)

posted @ 2020-04-19 08:10  G_keng  阅读(123)  评论(0编辑  收藏  举报