1. CDQ 分治优化 DP 的边界中为什么左侧区间贡献要先处理完再贡献右侧,复杂度 T(n)=2T(n/2)+O(n log n) 的解?
在 CDQ 分治优化 DP 中,为什么左侧区间贡献要先处理完再贡献右侧?求解 T(n)=2T(n/2)+O(n log n)?
- CDQ 分治的"先左后右"顺序
- 左侧贡献到右侧的依赖
- 复杂度递推求解
CDQ 分治优化 DP 时,dp[i] 依赖左侧所有 j<i 的 dp[j],因此分治处理 [l,r] 必须先递归算出左半 [l,mid] 的 dp 值,再用左半对右半 [mid+1,r] 的贡献(一次卷积)批量更新,最后递归右半。若先处理右半,那么右半 dp 依赖的左半贡献尚未就绪,结果错误。所以顺序必须是"先左、再左→右贡献、后右"。复杂度:每层处理一次跨区间卷积 O(n log n),共有 log n 层,故 T(n) = 2T(n/2) + O(n log n),解为 O(n log² n)(主定理:f(n)=n log n 与 n^{log_2 2}=n 比较,f(n) 是 n 的 log n 倍,故 T(n)=O(n log² n))。
CDQ 的"先左后右"保证了 DP 依赖顺序的正确性:左半算完才能贡献右半。复杂度上,每层把跨区间的 O(n²) 转移用卷积压缩到 O(n log n),log n 层得到 O(n log² n)。主定理中 f(n)=n log n 主导,比 n 多一个 log,故结果 O(n log² n)。