RMQ Tarjan的Sparse-Table算法
参考博客:https://www.cnblogs.com/wenzhixin/p/9714760.html
预处理时间复杂度是O(nlogn),代码如下:
void init(const vector<int>& A) {
int n = A.size();
for(int i = ; i < n; i++) {
d[i][] = A[i];//以i开头,长度为1的最小值是A[i]
}
for(int j = ; ( << j) <= n; j++) {//再区间范围内枚举次方
for(int i = ; i + ( << j) - < n; i++) {//枚举每一个开头,直到没有长度为2的j的区间
d[i][j] = min(d[i][j - ], d[i + ( << j) - ][j - ]);
}
}
}
查询是常数复杂度,这是RMQ的一大优点,相对于线段树的O(logn)复杂度有很大改进。查询的时候先给出最大的k s.t. 2^k<=R-L+1。代码如下:
int query(int L, int R) {
int k = ;
while(( << (k + )) <= R - L + ) k++;//若2的k+1次方<= R - L + 1,则k还可以加1
return min(d[L][k], d[R - ( << k) + ][k]);
}
RMQ Tarjan的Sparse-Table算法的更多相关文章
- RMQ ---- ST(Sparse Table)算法
[概述] RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返 ...
- codeforce 359D 二分+ 动态规划(sparse table)
原题链接:http://codeforces.com/problemset/problem/359/D 思路:首先对符合题目的长度(r-l)从0到n-1进行二分查找,对每一个长度进行check,看是否 ...
- RMQ(ST(Sparse Table))(转载)
1. 概述 RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A ...
- 一维二维Sparse Table
写在前面: 记录了个人的学习过程,同时方便复习 Sparse Table 有些情况,需要反复读取某个指定范围内的值而不需要修改 逐个判断区间内的每个值显然太浪费时间 我们希望用空间换取时间 ST表就是 ...
- 【图论】tarjan的离线LCA算法
百度百科 Definition&Solution 对于求树上\(u\)和\(v\)两点的LCA,使用在线倍增可以做到\(O(nlogn)\)的复杂度.在NOIP这种毒瘤卡常比赛中,为了代码的效 ...
- tarjan算法和Kosaraju算法
tarjan算法和Kosaraju算法是求有向图的强连通分量的算法: #include<iostream> #include<cstring> using namespace ...
- 算法详解(LCA&RMQ&tarjan)补坑啦!完结撒花(。◕ˇ∀ˇ◕)
首先,众所周知,求LCA共有3种算法(树剖就不说了,太高级,以后再学..). 1.树上倍增(ST表优化) 2.RMQ&时间戳(ST表优化) 3.tarjan(离线算法)不讲..(后面补坑啦!) ...
- 基于稀疏表(Sparse Table)的RMQ(区间最值问题)
在RMQ的其他实现方法中,有一种叫做ST的算法比较常见. [构建] dp[i][j]表示的是从i起连续的2j个数xi,xi+1,xi+2,...xi+2j-1( 区间为[i,i+2j-1] )的最值. ...
- ST (Sparse Table:稀疏表)算法
1541:[例 1]数列区间最大值 时间限制: 1000 ms 内存限制: 524288 KB提交数: 600 通过数: 207 [题目描述] 输入一串数字,给你 MM 个询问 ...
随机推荐
- Go基础学习(二)
数组[array] 数组定义[定义后长度不可变] 12 symbol := [...]string{USD: "$", EUR: "€", GBP: " ...
- linux下好用软件全记录
开发工具 1. Shutter 抓图工具(用过linux最好的抓图工具,类似win下的Snagit) 2. RabbitVCS SVN客户端(可以和subversion媲美的svn客户端) 3. My ...
- 【01】React 环境搭建
react来自于Facebook公司的开源项目 react 组件化模块化 开发模式 react通过对DOM的模拟(虚拟dom),最大限度地减少与DOM的交互 (数据绑定) react 基于jsx的 ...
- HTML标签学习总结(3)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...
- redis BLPOP
一.需求 redis中保存了需要download的image url,存储格式为列表. 我需要从列表中获取数据,将图片下载保存到本地. 列表中的数据是一直增加的. 二.实现 使用redis BLPOP ...
- python爬虫之selenium+打码平台识别验证码
1.常用的打码平台:超级鹰.打码兔等 2.打码平台在识别图形验证码和点触验证码上比较好用 (1)12306点触验证码 from selenium import webdriver from selen ...
- 一个基于Bootstrap实现的HMTL可视化编辑工具
疫情禁足在家,用原生的JS实现了一个HTML可视化编辑工具,页面布局基于Bootstrap.大约一个月时间,打通主要技术关卡,实现了第一版: 可以拖放编辑,实现了几乎所有的bootstrap预定义 ...
- Fedora CoreOS 非LInux专业安装文章第一手
开篇一张图 Docker基本知识掌握后,又学习了"专有的系统平台",CoreOS; 之前一直Windows,学习Docker的同时练习了好多Linux知识,全是江湖路数,打个不同就 ...
- css中grid属性的使用
grid布局 加在父元素上的属性 grid-template-columns/grid-template-rows 定义元素的行或列的宽高 如果父元素被等分成了9等分,则,不管有多少个子元素,都显示9 ...
- MySQL数据库无完整备份删库,除了跑路还能怎么办?
1.背景 前段时间,由于运维同事的一次误操作,清空了内网核心数据库,导致了公司内部管理系统长时间不可用,大量知识库内容由于没有备份险些丢失. 结合这两天微盟的删库跑路事件,我们可以看到,数据库的备份与 ...