ST 表整体二分解法
整体二分时遍历数组从 \(mid\) 开始的最大值再合并就可以了,时间 \(O(n \log n + q)\) 空间 \(O(n)\)。
#include<bits/stdc++.h>
//#define int long long
//#define lowbit(x) (x&-(x))
using namespace std;
const int maxn = 1e6+114;
int ans[maxn*5],a[maxn],lm[maxn],rm[maxn];
struct query{
int l,r,id;
};
void solve(int l,int r,queue<query> &s){
if(s.size()==0||l>r) return ;
if(l==r){
while(s.size()>0){
ans[s.front().id]=a[l];
s.pop();
}
return ;
}
int mid=(l+r)/2;
queue<query> L,R,M;
while(s.size()>0){
int lt=s.front().l,rt=s.front().r;
if(rt<=mid){
L.push(s.front());
}
else if(lt>mid){
R.push(s.front());
}
else{
M.push(s.front());
}
s.pop();
}
solve(l,mid,L);
solve(mid+1,r,R);
lm[0]=a[mid];
rm[0]=a[mid+1];
for(int i=mid-1;i>=l;i--){
lm[mid-i]=max(lm[mid-i-1],a[i]);
}
for(int i=mid+2;i<=r;i++){
rm[i-mid-1]=max(rm[i-mid-2],a[i]);
}
while(M.size()>0){
int lt=M.front().l,rt=M.front().r;
ans[M.front().id]=max(lm[mid-lt],rm[rt-mid-1]);
M.pop();
}
}
int n,m;
queue<query> S;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=m;i++){
query Q;
cin>>Q.l>>Q.r;
Q.id=i;
S.push(Q);
}
solve(1,n,S);
for(int i=1;i<=m;i++){
cout<<ans[i]<<'\n';
}
return 0;
}
ST 表整体二分解法的更多相关文章
- 【BZOJ5308】[ZJOI2018]胖(模拟,ST表,二分)
[BZOJ5308][ZJOI2018]胖(模拟,ST表,二分) 题面 BZOJ 洛谷 题解 首先发现每条\(0\)出发的边都一定会更新到底下的一段区间的点. 考虑存在一条\(0\rightarrow ...
- cf689d ST表RMQ+二分
类似hdu5289,但是二分更复杂.本题枚举左端点,右端点是一个区间,需要二分找到区间的左端点和右端点(自己手动模拟一次),然后区间长度就是结果增加的次数 另外结果开long long 保存 /** ...
- 静态区间第K小(整体二分、主席树)
题目链接 题解 主席树入门题 但是这里给出整体二分解法 整体二分顾名思义是把所有操作放在一起二分 想想,如果求\([1-n]\)的第\(k\)小怎么二分求得? 我们可以二分答案\(k\), \(O(n ...
- [Luogu2617]Dynamic Rankings(整体二分)
Luogu 动态区间第K大的整体二分解法 之前学主席树的时候就做了这道题(明明是树套树不是主席树啊),码量挺大而且调了我一个晚上.换成整体二分我半个小时就写完了而且一A. 写起来就是爽. 其实原理很简 ...
- UNR#3 Day1——[ 堆+ST表+复杂度分析 ][ 结论 ][ 线段树合并 ]
地址:http://uoj.ac/contest/45 第一题是鸽子固定器. 只会10分.按 s 从小到大排序,然后 dp[ i ][ j ][ k ] 表示前 i 个元素.已经选了 j 个.最小值所 ...
- 整体二分初探 两类区间第K大问题 poj2104 & hdu5412
看到好多讲解都把整体二分和$CDQ$分治放到一起讲 不过自己目前还没学会$CDQ$分治 就单独谈谈整体二分好了 先推荐一下$XHR$的 <浅谈数据结构题的几个非经典解法> 整体二分在当中有 ...
- 算法总结--ST表
声明(叠甲):鄙人水平有限,本文为作者的学习总结,仅供参考. 1. RMQ 介绍 在开始介绍 ST 表前,我们先了解以下它以用的场景RMQ问题.RMQ (Range Minimum/Maximum Q ...
- [BZOJ3277/BZOJ3473] 串 - 后缀数组,二分,双指针,ST表,均摊分析
[BZOJ3277] 串 Description 现在给定你n个字符串,询问每个字符串有多少子串(不包括空串)是所有n个字符串中至少k个字符串的子串(注意包括本身). Solution 首先将所有串连 ...
- 【BZOJ-4310】跳蚤 后缀数组 + ST表 + 二分
4310: 跳蚤 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 180 Solved: 83[Submit][Status][Discuss] De ...
- HDU5726 GCD(二分 + ST表)
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5726 Description Give you a sequence of N(N≤100, ...
随机推荐
- JavaScript 数组常用方法整理
数组变异方法 push() 数组末尾添加一个项目,返回新数组长度,arr.push(item)pop() 数组末尾删除一个元素,返回被删除元素,arr.pop()shift() 删除数组开头第1个元素 ...
- 2D空间中比较两三角形相交与包含
在处理UV重叠.CPU的ZFighting检测时会遇到2D空间中的三角形相交问题, 网上普遍是3D空间的相交解法,因此写本文研究下,不过虽然实现了需求, 但用的方法比较暴力. 效果如图: (鼠标拖动区 ...
- IDEA 2020 Maven编译问题:Error:(3, 32) java: 程序包org.springframework.boot不存在。
今天在编译Maven项目时,包已经加载好了,也进行了打包,途中均没有报错.package -- Install -- test 都没用问题,但是,一致性run,就会一直报错,如图 检查打包位置,包也在 ...
- ETSI GS MEC 013,UE 位置 API
目录 文章目录 目录 版本 功能理解 Relation with OMA APIs Relation with OMA API for Zonal Presence Relation with OMA ...
- VSCode:Mac(M1)配置VSCode中C/C++环境(只需三步)
只需三步. 1. 下载CodeLLDB插件: 2. 配置tasks.json { "version": "2.0.0", "tasks": ...
- Ceph存储池管理
目录 Ceph存储池 1. Ceph的存储流程 1. 数据写入 2. 数据读取 2. 资源池的配置 2.1 资源池创建 pgp是什么 (Placement Group for Placement pu ...
- 阿里巴巴 MySQL 数据库之建表规约(一)
建表规约 强制部分 [强制] 表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据类型是 unsigned tinyint (1 表示是,0 表示否). 说明:任何字段如果为非负数,必须是 ...
- MySQL中drop/truncate/delete的区别
1.Delete语句执行删除的过程是每次从表中删除一行,并且同时将删除操作作为事务记录在日志中保存以便进行进行回滚操作(只删除表数据). delete是DML,执行delete操作时,每次从表中删除一 ...
- H.264码流解析
这一篇内容旨在对H.264码流中的一些概念做简单了解. 1.概念了解 VCL:Video Coding Layer视频编码层,它是H.264(AVC)编码中的核心,负责视频数据的编码工作.VCL层会应 ...
- Qt开发技术:Q3D图表开发笔记(四):Q3DSurface三维曲面图颜色样式详解、Demo以及代码详解
前言 qt提供了q3d进行三维开发,虽然这个框架没有得到大量运用也不是那么成功,性能上也有很大的欠缺,但是普通的点到为止的应用展示还是可以的. 其中就包括华丽绚烂的三维图表,数据量不大的时候是可 ...