P1527 [国家集训队] 矩阵乘法
问题:n×n 矩阵上的区间第 k 大。1≤n≤500,1≤m≤60000。
整体二分板子题对我这个树套树爱好者来说就是树套树进阶题。所以考虑线段树套主席树,内层记录每一行的值域,支持 O(logn) 查询。外层是记录区间,把矩阵询问转化为 O(logn) 个区间询问。最外层二分答案。时间复杂度 T(插入复杂度+查询数×查询复杂度×二分复杂度)=T(n2log2n+mlog2nlogn2)=T(n2log2n+2mlog3n),算下来大概是 25,000,000+120,000,000=145,000,000=1.45×108=O(勉强能过)。但是空间复杂度 T(插入个数×被插入的区间个数×主席树插入所需空间×大约的空间常数)=T(n2×2logn×logn×3)=T(6n2log2n)。以上计算采用的是每棵主席树里面都各自离散化,算下来也是 ≥140MB 爆炸。
经分析发现问题主要出在外层树开了太多主席树,所以考虑减少主席树的数量。把外层树换成分块,空间复杂度 T((零散块空间+整块空间)×大约的空间常数)=T((n2logn+n×nnlognn)×3)=T(3n2logn25),算下来大概是 64MB 很稳。但是时间变成了 T(m×(nlognn+nlogn))=T(mnlogn25),算下来是 3×108=O(非常悬),虽然时限是 1.5s,但是分块的常数也不小,所以说还是很困难。
所以我想问一下:有没有人有方法以空间换时间的?或者说有没有其他的树套树解法?
我不期望得到靠谱的答案,所以不太靠谱的也可以。