A. 要换换名字
显然二分一个答案,然后问题转化为二分图中是否存在一组完美匹配。
然后发现,如果一个字符串的子序列个数超过 $n$ ,那么就没有必要接着连边了。
所以对每个字符串建出不超过 $n$ 条边,然后跑个网络流就完事了。
B. 动态半平面交
因为太菜了,所以只会用一些套路来做这个题。
容易发现 $lcm$ 就是对每个质因子给指数取 $max$。
所以考虑以深度为下标,维护一个单调栈。
然后对这个单调栈进行差分操作表示每次的变化量。
然后这个问题在树上的复杂度不正确,所以搞个 dsu 就完事了。
然后发现现在单调栈并不是在尾部插入了,所以需要搞个 set 来维护这个单调栈。
把线段树持久化一下,就可以在线回答询问了。
正解的思路是这样的。
考虑把 $p^k$ 这个玩意转化为 $k$ 个物品,其中每个物品的权值都是 $p$。
然后现在的问题就是给定 $u,d$ ,问 $u$ 子树中距离不超过 $d$ 的物品的权值乘积。
这个东西直接用 set 维护一下链并就行了。
常规的思路都是从子树到父亲的转移,然后就需要限制 $d$ 这个东西就很麻烦。
然后这里的做法是按照深度从小到大转移,然后使线段树的下标为 $dfs$ 序,这样的话直接查询最大的深度所在的线段树就完事了。
C. 获取名额
显然答案是 $1-prod limits_{i=l}^r 1-frac{a_i}{x}$。
为了避免高精度,首先给每个 $a_i$ 和每个 $x$ 都除掉一个 $max(a_i)$。
考虑给后面的连乘套上一个取$ln$,然后就转化为了简单的求和的形式。
但是仍然是与 $x$ 有关的形式,没办法直接搞。
所以整个泰勒展开,维护 $x^k (k leq 30)$的系数,然后计算就可以了。
然后发现这个取 $ln$ 操作在 $a_i$ 特别大的时候,就会导致 $ln(1-frac{a_i}{x})$ 这个数的绝对值很大,然后精度就没了。
但是容易发现这样的数不会很多,因为精度只要求到 $10^{-6}$,如果这样的数很多就可以直接跳出了。
考虑定义一个阈值为 $0.5*x$ ,如果 $a_i>0.5*x$ ,就暴力计算这样的数,否则直接用泰勒展开。
因为是静态的,所以整个 ST 表出来,然后直接按照最值分治就好了,如果当前的数精度已经够了,就直接跳出分治。
然后发现因为每次找最值的精度都翻倍,复杂度显然是不超过两个 $log$ 的。