信友对的好题
省流:自己没做出来。
description
给你 \(n, k\),问在 \(n\) 个结点的线段树上,有多少个查询区间 \([l, r]\) 最终被拆分为 \(k\) 个区间。
solution
发现 \(k\) 最多为 \(2 \log n\),所以考虑 DP。
考虑 DP \(f_{i, j, k}\) 表示在线段树结点 \(i\) 上,包含答案为 \(j\) 的区间个数,\(k\) 则限定了这些区间左端点是否必须为 \(l\),右端点是否为 \(r\)。
然后我们发现合并状态的时候计算一下即可,这一步是 \(O(n \log^2 n)\) 的。
但是发现,我的转移貌似只和长度有关,也就是说,我每种长度的 DP 值是一样的,所以将复杂度记忆化降到 \(O(\log^3 n)\)。

浙公网安备 33010602011771号