做题记录 25.7.30
\(\textcolor{blue}\odot\) CF1637F Towers
令 \(h\) 最大的点 \(rt\) 为根,则它需要有至少两个子树内存在势能 \(\ge h_{rt}\) 的点,对于所有 \(x\ne rt\),只需要子树 \(x\) 内存在势能 \(\ge h_x\) 的点即可(路径另一端取 \(rt\) 另一子树内势能 \(\ge h_{rt}\) 的点即符合要求)
从下向上处理,记录每个子树内势能的最大值,处理到结点 \(x\) 时,若 \(x=rt\) 则从它的所有儿子中选择所在子树最大值最大的两个,都增加至 \(\ge h_x\),否则选择一个增加至 \(h_x\) 并跟新最大值
时间复杂度 \(O(n)\)
\(\textcolor{purple}\odot\) CF1634F Fibonacci Additions
维护 \(c=a-b\),则 \(a=b\) 当且仅当 \(\forall i,c_i=0\)
令 \(d_i=c_i-c_{i-1}-c_{i-1}\),则 \(c\) 的 \([l,r]\) 加斐波那契等价于 \(d_l\) 加一,\(d_{r+1}\) 减去 \(F_{r-l+2}\),\(d_{r+2}\) 减去 \(F_{r-l+1}\)(其中 \(F\) 为斐波那契数列)
\(c\) 全 \(0\) 等价于 \(d\) 全 \(0\),因此维护 \(d\) 中 \(0\) 的数量即可
时间复杂度 \(O(n+q)\)
\(\textcolor{purple}\odot\) CF1635F Closest Pair
令 \(L_i\) 为 \(i\) 左侧第一个 \(w_p\le w_i\) 的位置 \(p\),\(R_i\) 为 \(i\) 右侧第一个 \(w_p\le w_i\) 的位置 \(p\),则最优解一定为选择一个 \([L_i,i]\) 或 \([i,R_i]\)
证明:
- 假如选择的不是两类之一,设选择了 \([l,r]\),\(w_l\le w_r\)(若 \(w_l>w_r\) 则对称),且 \(l\ne L_r\),显然 \(l<L_r\),若 \(w_{L_r}\le w_l\) 则取 \([L_r,r]\),否则取 \([l,L_r]\) 并继续尝试即可,显然权值更小
- 选择一个 \([L_i,i]\)(\([i,R_i]\) 与之对称),显然对于任意 \(j\in (L_i,i)\),\([L_i,j]\) 和 \([j,i]\) 都劣于 \([L_i,i]\)
- 因此最优情况下选择的一定为 \([L_i,i]\) 或 \([i,R_i]\)
剩余部分容易扫描线解决,时间复杂度 \(O((n+q)\log n)\)
\(\textcolor{purple}\odot\) CF1648D Serious Business
令 \(a,b,c\) 为三行的前缀和,\(Q\) 为操作集合,\(f_i\) 为从 \((1,1)\) 走到 \((2,i)\) 的最大收益,则答案为 \(\max_{i=1}^n (f_i+c_n-c_i)\),考虑如何求出 \(f_i\)
枚举最后一个区间 \((l,r,k)\),满足 \(l\le i\le r\),若第一行到第二行的转折点在当前区间以前,则
在 \(dp\) 过程中令 \(S\) 为 \(\{f_{l-1}-b_{l-1}-k \mid (l,r,k)\in Q,l\le i\le r\}\),则转移为 \(f_i\gets \max S-b_i\),容易 \(O((n+q)\log n)\) 维护这部分
若转折点在当前区间中,则
令 \(v_x=\max_{(l,r,k)\in Q,l\le i\le r,l\le x\le r}(a_x-b_{x-1}-k)\),则 \(f_i\gets \max_{j=1}^i v_j+b_i\)
考虑对于每个位置 \(x\) 维护一个集合 \(K_x=\{k\mid (l,r,k)\in Q,l\le i\le r,l\le x\le r\}\),则需要维护三种操作:
- 区间内 \(K\) 插入一个数
- 区间内 \(K\) 删除一个数
- 求区间内 \(a_x-b_{x-1}-\min K_x\) 的最大值
使用标记永久化容易做到 \(O((n+q)\log^2 n)\)
显然将所有插入操作提到求 \(f\) 之前不会影响答案,此时按 \(k\) 从大到小的顺序插入,则每个结点上的 \(K\) 从大到小,vector 保存 \(K_x\),懒惰删除即可
总时间复杂度 \(O((n+q)\log n)\)

浙公网安备 33010602011771号