省选模拟4 题解
A. 点点的圈圈 因为题中保证的特殊性质,容易发现圆之间的关系形成树形结构。 对于每棵子树,选择树的根或者累计所有子树的答案。 问题在于建图,容易发现这个可以用KDTree优化。 考虑将所有的点建在KDTree上。 用每个点的圆覆盖KDTree,当完全覆盖时直接塞入对应点的vector中。 之后DFS一遍KDTree,同时用一个set维护祖先链上所有的vector的集合。 set所表示的集合即能覆盖该点的所有的圆。 对于KDTree中每一个点,直接在set中查后继就可以找到他的父亲。 B. 点点的计算 根据大神的一番推导证明,可得原式$=lcm_{i=n-k+1}^n i$ 考虑求出一个数组$b_{i,j}$,使得$\prod_{i=n-k+1}^{n} b_{n,i}=lcm_{i=n-k+1}^n i$,即每向左一步的增量。 问题在于如何通过$b_{n-1}$推出$b_n$。 直接令$b_{n}=b_{n-1}$,$b_{n,n}=n$,然后发现前面一些贡献出错了。 对于前面的$b_{n,i}$中含有$n$的一些质因子,统计重复了,所以不断乘逆元消掉。 这个玩意可以直接用一些栈来维护。 为了在线的回答询问,将这个数组通过可持久化线段树实现就好了。 容易发现取$lcm$对应着指数取$max$。 所以这个做法实际上是对这个指数最值的差分,实际上与$zkw