博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RMQ问题
阅读量:5032 次
发布时间:2019-06-12

本文共 749 字,大约阅读时间需要 2 分钟。

就是区间询问问题,m次询问,问你[L,R]区间什么什么。。。。。

1,区间和

  这类问题都极好处理

  I、离线查询,直接sum[i]存储前缀和(sum[i]=sum[i-1]+a[i],即存储了前i个数的和),SUM(L->R)= sum[R] - sun[L-1]。

  II、在线查询,单点修改推荐树状数组,代码简单:  

int arr[MAXN];  //初始为0inline int sum(int x){
int res=0;while(x)res+=arr[x],x-=lowbit(x);return res;} inline void add(int x,int n){
while(x

 

   区间修改,推荐线段树

2,线段树理解

  递归的思想,用二叉树来实现。

  如果我们能用很少的运算通过[L,(L+R)/2],[(L+R)/2 + 1,R]计算出[L,R],那就可以用线段树了   

3,莫队算法(离线查询)理解

  将需要查询的m个区间排好序,通过对上一次查询的区间的两个端点的移动来得出本区间的答案,每一次查询的时间复杂度就是两个端点的移动次数和

  (例如从[1,10][2,15],左端点向右移1次,右端点向右移5次就ok了)

  如果我们知道区间[L,R] ,就能在比较短的时间内求出[L1,R],[L+1,R],[L,R1],[L,R+1] 的话,那就可以用莫队算法了。

  据说:莫队算法的实质是通过将询问排序,每个询问均由前一个询问(排序后的)转移得来,通过一定的排序优化时间复杂度。往往可以有O(N√N) 的效果

 

转载于:https://www.cnblogs.com/lnu161403214/p/8168398.html

你可能感兴趣的文章
oracle连接的三个配置文件(转)
查看>>
Vim配置文件(Vimrc)
查看>>
RecyclerView 局部刷新(获取viewHolder 去刷新)
查看>>
PHP表单(get,post)提交方式
查看>>
使用vbs或者bat脚本修改IE浏览器安全级别和选项
查看>>
Silverlight入门
查看>>
Silverlight动态调用WEBSERVICE,WCF方法
查看>>
LeetCode 895. Maximum Frequency Stack
查看>>
模仿segmentfault 评论
查看>>
一个简单的日志函数C++
查看>>
Java 8 中如何优雅的处理集合
查看>>
IOS程序的启动过程
查看>>
连接Linux下 XAMPP集成环境中部署的禅道的数据库MariaDB
查看>>
Java操作Excel和Word
查看>>
Oracle 体系结构之ORACLE物理结构
查看>>
ORA-12538: TNS: no such protocol adapter
查看>>
盒子模型
查看>>
局域网协议
查看>>
[HNOI2012]永无乡 线段树合并
查看>>
Spring整合hibernate:3、使用XML进行声明式的事务管理
查看>>