整体二分时遍历数组从 \(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 表整体二分解法的更多相关文章

  1. 【BZOJ5308】[ZJOI2018]胖(模拟,ST表,二分)

    [BZOJ5308][ZJOI2018]胖(模拟,ST表,二分) 题面 BZOJ 洛谷 题解 首先发现每条\(0\)出发的边都一定会更新到底下的一段区间的点. 考虑存在一条\(0\rightarrow ...

  2. cf689d ST表RMQ+二分

    类似hdu5289,但是二分更复杂.本题枚举左端点,右端点是一个区间,需要二分找到区间的左端点和右端点(自己手动模拟一次),然后区间长度就是结果增加的次数 另外结果开long long 保存 /** ...

  3. 静态区间第K小(整体二分、主席树)

    题目链接 题解 主席树入门题 但是这里给出整体二分解法 整体二分顾名思义是把所有操作放在一起二分 想想,如果求\([1-n]\)的第\(k\)小怎么二分求得? 我们可以二分答案\(k\), \(O(n ...

  4. [Luogu2617]Dynamic Rankings(整体二分)

    Luogu 动态区间第K大的整体二分解法 之前学主席树的时候就做了这道题(明明是树套树不是主席树啊),码量挺大而且调了我一个晚上.换成整体二分我半个小时就写完了而且一A. 写起来就是爽. 其实原理很简 ...

  5. UNR#3 Day1——[ 堆+ST表+复杂度分析 ][ 结论 ][ 线段树合并 ]

    地址:http://uoj.ac/contest/45 第一题是鸽子固定器. 只会10分.按 s 从小到大排序,然后 dp[ i ][ j ][ k ] 表示前 i 个元素.已经选了 j 个.最小值所 ...

  6. 整体二分初探 两类区间第K大问题 poj2104 & hdu5412

    看到好多讲解都把整体二分和$CDQ$分治放到一起讲 不过自己目前还没学会$CDQ$分治 就单独谈谈整体二分好了 先推荐一下$XHR$的 <浅谈数据结构题的几个非经典解法> 整体二分在当中有 ...

  7. 算法总结--ST表

    声明(叠甲):鄙人水平有限,本文为作者的学习总结,仅供参考. 1. RMQ 介绍 在开始介绍 ST 表前,我们先了解以下它以用的场景RMQ问题.RMQ (Range Minimum/Maximum Q ...

  8. [BZOJ3277/BZOJ3473] 串 - 后缀数组,二分,双指针,ST表,均摊分析

    [BZOJ3277] 串 Description 现在给定你n个字符串,询问每个字符串有多少子串(不包括空串)是所有n个字符串中至少k个字符串的子串(注意包括本身). Solution 首先将所有串连 ...

  9. 【BZOJ-4310】跳蚤 后缀数组 + ST表 + 二分

    4310: 跳蚤 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 180  Solved: 83[Submit][Status][Discuss] De ...

  10. HDU5726 GCD(二分 + ST表)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5726 Description Give you a sequence of N(N≤100, ...

随机推荐

  1. 介绍几种常用的Oracle客户端工具

    首发微信公众号:SQL数据库运维 原文链接:https://mp.weixin.qq.com/s?__biz=MzI1NTQyNzg3MQ==&mid=2247485212&idx=1 ...

  2. C语言:如何删除在可视化网页中未可见的内容(网页txt)

    我这个代码仅仅限制于在chrome浏览器中下载china daliy的网页中实现删除可视化内容,因为每个网页的超链接或者文本主内容分布不一样,但是学会了删除一个网页类型的不可视化内容之后,修改其他网页 ...

  3. JDK源码阅读-------自学笔记(十七)(java.io.File类)

    File类简介 java.io.File类:抽象代表文件和目录. 使用此类,相当于获取了系统的文件,可以对其进行操作. 在开发中,读取文件.生成文件.删除文件.修改文件的属性时经常会用到本类 File ...

  4. C 语言编程 — 代码规范

    目录 文章目录 目录 前文列表 空行 空格 缩进 对齐 代码行 注释 示例 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基本语法> <C 语言编程 ...

  5. Prompt提示词助力AI写作

    AI以极高的效率和还可以的输出质量,得到了许多写作人的青睐,Prompt作为AI写作的核心,通过简短的提示来引导AI生成文本,让写作新手也能轻松自如. 1. 看不下去的行业乱状 让人不禁遗憾的是,国外 ...

  6. 大数据Hadoop集群的扩容及缩容(动态添加删除节点)

    添加白名单和黑名单 白名单,表示在白名单的主机IP地址可以用来存储数据 企业中:配置白名单,可以尽量防止黑客恶意访问攻击. 配置白名单步骤如下:原文:sw-code 1)在NameNode节点的/op ...

  7. Composer 的下载与安装

    一,Composer 的下载与安装 官网下载:https://getcomposer.org/download/ 打开  penssl的注释,在  D:\wamp\php7230\php.ini  文 ...

  8. 源码分析——MyBatis与Spring整合后如何保证SqlSession线程安全

    在MyBatis架构中SqlSession是提供给外层调用的顶层接口,它是MyBatis对外暴露的最重要的接口,用户通过该接口即可完成数据库的全部操作.在上文中我们明白了我们常用的Mybatis动态代 ...

  9. 做程序员这么久,你知道UTF-8和Unicode的关系吗?

    UTF-8和Unicode到底有什么区别?是存储方式不同?编码方式不同?它们看起来似乎很相似,但是实际上他们并不是同一个层次的概念. 要想先讲清楚他们的区别,首先应该讲讲Unicode的来由: 众所周 ...

  10. Android OpenMAX - 开篇

    Android Media是一块非常庞大的内容,上到APP的书写,中到播放器的实现.封装格式的了解,下到OMX IL层的实现.Decoder的封装,每一块都需要我们下很大的功夫学习.除此之外,我们还要 ...