[unknown OJ] 养花

"本文探讨了如何利用kkk分块和主席树解决区间最大值查询的问题。对于值域小于SSS的情况,通过线段树实现暴力处理,查询时间为O(qlog⁡n)O(qlog n)O(qlogn),而当值域超过SSS时,使用主席树将值域划分为V/kV/kV/k段,时间复杂度达到O(nlog⁡nV/S)O(nlog nV/S)O(nlognV/S)。最优解发生在S=Vlog⁡nS=sqrt{Vlog n}
摘要由CSDN通过智能技术生成

一、题目

点此看题

二、解法

可以按照 k k k分块,假设界限是 S S S,假设值域是 V V V

对于不足 S S S的情况,可以暴力处理,建出线段树的时间花费是 O ( n S ) O(nS) O(nS)的,查询是 O ( q log ⁡ n ) O(q\log n) O(qlogn)

对于超过 S S S的情况,我们用 k k k将值域划分成 V / k V/k V/k 段,对于每一段是可以直接找最大值的。问题变成了区间中值域区间最大值,用主席树即可,那么时间复杂度是 O ( n log ⁡ n V / S ) O(n\log n V/S) O(nlognV/S)

所以当 S = V log ⁡ n S=\sqrt {V\log n} S=Vlogn

咕咕咕
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值