C
\(n\times m\) 个人,选择某人的代价是 \(a_{i,j}\),可以使其负责其所在的行/列,问使得所有行列被负责最小代价。
\(nm\le 10^5\)。
若选择 \(a_{i,j}\),看做是第 \(i\) 行跟第 \(j\) 列连了一条有向边,你发现最后图的形式是一个基环树森林。
但是边是有向的,不难发现如果我们确定了基环树森林出来,随便定向即可。
考虑类似 kruskal 那样求最小基环树森林。
D
有 \(n\) 个函数,\(f_i(x)\) 的值为若 \(x\ge a_i\),那么 \(x\gets x+b_i\)。
\(q\) 次在线询问,给定 \(l,r,x\),问 \(f_r(f_{r-1}(...f_l(x)))\) 的值。\(n\le 5e5,q\le 2e5\)。
如果离线,注意到元素的相对顺序不会改变,扫描线时维护一个当前所有询问集合即可。
如果在线,我们还是利用元素的相对顺序不变的性质,选择用线段树维护分段函数。
因为上述性质,长度为 \(n\) 的区间,分段函数的不同的段只有 \(O(n)\)。
线段树的话合并左右儿子的时候考虑用双指针即可。
查询时把 $\log $ 个区间拿出来即可,再每个区间里依此二分,就这样。