Loading

信友对的好题

省流:自己没做出来。

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)\)

posted @ 2024-11-16 14:54  Alexande  阅读(9)  评论(0)    收藏  举报