关于 P1527 的树套树做法的问题
  • 板块学术版
  • 楼主Nemonade
  • 当前回复18
  • 已保存回复18
  • 发布时间2023/7/17 20:38
  • 上次更新2023/11/3 09:15:30
查看原帖
关于 P1527 的树套树做法的问题
389797
Nemonade楼主2023/7/17 20:38

P1527 [国家集训队] 矩阵乘法

问题:n×nn\times n 矩阵上的区间第 kk 大。1≤n≤5001\le n\le500,1≤m≤600001\le m\le60000。

整体二分板子题对我这个树套树爱好者来说就是树套树进阶题。所以考虑线段树套主席树,内层记录每一行的值域,支持 O(log⁡n)O(\log n) 查询。外层是记录区间,把矩阵询问转化为 O(log⁡n)O(\log n) 个区间询问。最外层二分答案。时间复杂度 T(插入复杂度+查询数×查询复杂度×二分复杂度)=T(n2log⁡2n+mlog⁡2nlog⁡n2)=T(n2log⁡2n+2mlog⁡3n)T(插入复杂度+查询数\times查询复杂度\times二分复杂度)=T(n^2\log^2n+m\log^2n\log n^2)=T(n^2\log^2n+2m\log^3n),算下来大概是 25,000,000+120,000,000=145,000,000=1.45×108=O(勉强能过)25,000,000+120,000,000=145,000,000=1.45\times10^8=O(勉强能过)。但是空间复杂度 T(插入个数×被插入的区间个数×主席树插入所需空间×大约的空间常数)=T(n2×2log⁡n×log⁡n×3)=T(6n2log⁡2n)T(插入个数\times被插入的区间个数\times主席树插入所需空间\times大约的空间常数)=T(n^2\times2\log n\times\log n\times 3)=T(6n^2\log^2n)。以上计算采用的是每棵主席树里面都各自离散化,算下来也是 ≥140MB\ge140MB 爆炸。

经分析发现问题主要出在外层树开了太多主席树,所以考虑减少主席树的数量。把外层树换成分块,空间复杂度 T((零散块空间+整块空间)×大约的空间常数)=T((n2log⁡n+n×nnlog⁡nn)×3)=T(3n2log⁡n52)T((零散块空间+整块空间)\times大约的空间常数)=T((n^2\log n+\sqrt n\times n\sqrt n\log n\sqrt n)\times3)=T(3n^2\log n^\frac{5}{2}),算下来大概是 64MB64MB 很稳。但是时间变成了 T(m×(nlog⁡nn+nlog⁡n))=T(mnlog⁡n52)T(m\times(\sqrt n\log n\sqrt n+\sqrt n\log n))=T(m\sqrt n\log n^\frac{5}{2}),算下来是 3×108=O(非常悬)3\times10^8=O(非常悬),虽然时限是 1.5s1.5s,但是分块的常数也不小,所以说还是很困难。

所以我想问一下:有没有人有方法以空间换时间的?或者说有没有其他的树套树解法?

我不期望得到靠谱的答案,所以不太靠谱的也可以。

2023/7/17 20:38
加载中...