A
莫队复杂度不对啊。
考虑《HH 的项链》的做法,在遍历到一个点 u 的时候加入,在回溯的时候撤销。
B
先做 Type=1。
称边 (n−1,i) 为第 i 条一类边,设一类边总共 m 条。
我们只关心选择的一类边集合 S。
答案为 ∑S∏i>0Si−Si−1。考虑计数 dp。
设 fi 表示现在考虑了前 i 条边,钦定第 i 边必选的答案。
不难写出转移 fi=1+∑j<ifj(i−j)p,复杂度 O(n2)。
前缀和优化,prei=∑j<ifj,pprei=∑j≤iprej,fi=pprei+1。
矩阵快速幂优化。
⎣⎡pre′ppre′1⎦⎤=⎣⎡1p11p+11001⎦⎤⎣⎡preppre1⎦⎤
复杂度 O(27logn)。
再做 Type=2。
枚举 S 中第一条以及最后一条边 l,r,则 ans=∑Sfr−l′(m−(r−l))(n−1−(r−l)p)。
其中 f′ 的定义与 f 相似,但是钦定第一条边必选。
同样使用前缀和优化做到 O(n)。
还差 tp=2,p=1 的做法。
设 g(i) 表示 n=i,p=1 是的答案。
打表不难发现 g 的前三项为 1,1,3。对于 i>3,g(i)=3g(i−1)−g(i−2)+2。
同样使用矩阵快速幂加速。
C
暴力是枚举每个 x,ansx=minSi+f(i,x),f(i,x) 表示 [1,i] 中最小的 x 个 aj 之和。
设 posx 表示 ansx 的最小决策点。
打表不难发现,posx 单调不降。
证明:
反证法,设 posx=i,posx+1=j,j<i。
那么有 f(j,x+1)+Sj<f(i,x+1)+Si。
移项 f(j,x+1)−f(i,x+1)<Si−Sj。
又 f(i,x+1)−f(i,x)≤f(j,x+1)−f(j,x)。
移项 f(j,x)−f(i,x)≤f(j,x+1)−f(i,x+1)。
所以 f(j,x)−f(i,x)<Si−Sj。
所以 f(j,x)+Sj<f(i,x)+Si。
所以 posx=i,矛盾。
于是使用分治优化决策单调性,用主席树求前 k 小之和。