倍增和差分

本文介绍了两种降低时间复杂度的方法——倍增和差分。倍增算法主要用于区间最值查询(RMQ),通过预处理达到O(nlogn)的时间复杂度,查询时为O(1)。差分数组则用于区间修改和查询,通过计算差分数组简化操作。文章详细阐述了倍增算法的ST表构建和RMQ查询,以及差分数组的应用。
摘要由CSDN通过智能技术生成

两种降时间复杂度的方法

离线查询(做起来容易):CDQ分治

在线查询:树套树

倍增

RMQ

区间最值查询Range Minimum/Maximum Query:给定一个数组,求出给定区间[l,r]最值的下标

倍增最关键的地方是:绝对不会走都是相同的步数(比如说走两步可以到达的地方绝对不会分两个一步走)

其次可以想到:成倍的增长->2(1,2,4,8,16…)

ST(Sparse Table)算法:O(nlogn)预处理,O(1)查询

求最小值

1.预处理(动态规划)

f(i,j)表示区间[i,i+2j-1]

第i个点到第i+2j-1个点的最小值

即f(i,0)表示区间[i,i]的最小值(即这个值)、f(i,1)表示区间[i,i+1]、f(i,2)表示区间[i,i+3]、f(i,3)表示区间[i,i+7]~i+15,i+31+…依次类推

用动态规划的思想,大区间的最小值可以由小区间的最小值转移而来,由此我们可以发现区间[i,i+2j-1]的最小值可以由区间[i,i+2j-1-1]的最小值和[i+2j-1,i+2

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值