题目大意:区间静态最大值

题解:ST表,zkw线段树

ST表:

st[i][j]存[i,i+$j^{2}$-1]的最大值,查询时把区间分成两个长度相同的小区间(可重复)

#include<cstdio>
#include<cctype>
using namespace std;
const int maxn=100010;
int n,m,M;
int st[maxn][20],lg[maxn];
inline int max(int a,int b){return a>b?a:b;}
inline void read(int &x){
char t=getchar();
while (!isdigit(t))t=getchar();
for (x=t^48,t=getchar();isdigit(t);t=getchar())x=x*10+(t^48);
}
int main(){
read(n),read(m);
lg[0]=-1;
for (int i=1;i<=n;i++)lg[i]=lg[i>>1]+1;
for (int i=1;i<=n;i++)read(st[i][0]);
for (int i=1;i<=17;i++){
int tmp=1<<i-1;
for (int j=1;j+(tmp<<1)-1<=n;j++)st[j][i]=max(st[j][i-1],st[j+tmp][i-1]);
}
while (m--) {
int x,y,tmp;
read(x),read(y);
tmp=lg[y-x+1];
printf("%d\n",max(st[x][tmp],st[y-(1<<tmp)+1][tmp]));
}
return 0;
}

ZKW线段树:

#include<cstdio>
#include<cctype>
using namespace std;
const int maxn=100010;
int n,m,M;
int ts[maxn<<2];
inline int max(int a,int b){return a>b?a:b;}
inline void read(int &x){
char t=getchar();
while (!isdigit(t))t=getchar();
for (x=t^48,t=getchar();isdigit(t);t=getchar())x=x*10+(t^48);
}
int ask(int s,int t){
int ans=-2147483647;
for (s+=M-1,t+=M+1;s^t^1;s>>=1,t>>=1){
if (~s&1)ans=max(ans,ts[s^1]);
if (t&1)ans=max(ans,ts[t^1]);
}
return ans;
}
int main(){
read(n),read(m);
for (M=1;M<=n+1;M<<=1);
for (int i=M+1;i<=M+n;i++)read(ts[i]);
for (int i=M-1;i;i--)ts[i]=max(ts[i<<1],ts[i<<1|1]);
while (m--){
int x,y;
read(x),read(y);
printf("%d\n",ask(x,y));
}
return 0;
}

[洛谷P3865]【模板】ST表的更多相关文章

  1. 【洛谷】【st表+模拟】P1311 选择客栈

    [题目描述:] 丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号.每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0 ~ k-1 表示),且每家客栈都设有一家咖啡店,每家咖 ...

  2. 洛谷P3373 [模板]线段树 2(区间增减.乘 区间求和)

    To 洛谷.3373 [模板]线段树2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格 ...

  3. [算法模板]ST表

    [算法模板]ST表 ST表和线段树一样,都能解决RMQ问题(范围最值查询-Range Minimum Query). 我们开一个数组数组\(f[maxn][maxn\log_2]\)来储存数据. 定义 ...

  4. 洛谷 P3865 【模板】ST表

    P3865 [模板]ST表 题目背景 这是一道ST表经典题——静态区间最大值 请注意最大数据时限只有0.8s,数据强度不低,请务必保证你的每次查询复杂度为 O(1)O(1) 题目描述 给定一个长度为  ...

  5. 洛谷—— P3865 【模板】ST表

    https://www.luogu.org/problemnew/show/P3865 题目背景 这是一道ST表经典题——静态区间最大值 请注意最大数据时限只有0.8s,数据强度不低,请务必保证你的每 ...

  6. skkyk:题解 洛谷P3865 【【模板】ST表】

    我不会ST表 智推推到这个题 发现标签中居然有线段树..? 于是贸然来了一发线段树 众所周知,线段树的查询是log(n)的 题目中"请注意最大数据时限只有0.8s,数据强度不低,请务必保证你 ...

  7. 洛谷 P3865 ST表

    ST表 ST表的功能很简单 它是解决RMQ问题(区间最值问题)的一种强有力的工具 它可以做到O(nlogn)预处理,O(1)查询最值 是一种处理静态区间可重复计算问题的数据结构,一般也就求求最大最小值 ...

  8. LCT总结——概念篇+洛谷P3690[模板]Link Cut Tree(动态树)(LCT,Splay)

    为了优化体验(其实是强迫症),蒟蒻把总结拆成了两篇,方便不同学习阶段的Dalao们切换. LCT总结--应用篇戳这里 概念.性质简述 首先介绍一下链剖分的概念(感谢laofu的讲课) 链剖分,是指一类 ...

  9. [模板]ST表浅析

    ST表,稀疏表,用于求解经典的RMQ问题.即区间最值问题. Problem: 给定n个数和q个询问,对于给定的每个询问有l,r,求区间[l,r]的最大值.. Solution: 主要思想是倍增和区间d ...

随机推荐

  1. Oracle数据库远程访问

    如果需要访问非本机的Oracle数据库,首先需要安装一个Oracle的客户端,我直接安装的服务器版本的Oracle,也自带客户端. 安装完成后,如果访问本机的服务器的话,直接就可以访问,无需配置, 如 ...

  2. 【c学习-12】

    /*枚举*/ #include void enumFunction(){ enum enum_var{"a","b",1,2}; enum{"c&qu ...

  3. 其他乱七八糟的css

    white-space:normal; word-break:break-all;字母数字强制换行表格宽度失效给上table-layout:fixed(display: table-cell;此元素会 ...

  4. Overview of the High Efficiency Video Coding (HEVC) Standard阅读笔记

    1.INTRODUCTION High Efficiency Video Coding(HEVC) <-> H.265 MPEG-4 Advanced Video Coding(AVC) ...

  5. HBase 增删改查Java API

    1. 创建NameSpaceAndTable package com.HbaseTest.hdfs; import java.io.IOException; import org.apache.had ...

  6. 4364: [IOI2014]wall砖墙

    4364: [IOI2014]wall砖墙 链接 分析: 线段树,维护一个最大值,一个最小值. 代码: #include<bits/stdc++.h> ],*p1 = buf,*p2 = ...

  7. jmeter上传视频图片附件

    http上传附件一般用的Content-Type: multipart/form-data;文中是先通过fiddler抓取手机端的请求,然后通过jmeter模拟该请求,如果有接口文档,则可以跳过抓包这 ...

  8. vue3.0 部署的基础流程

    1.创建vue.config.js 主要是负责做设置的 2.修改vue.config.js 参考官方说明: 注意:对于本地开发的同学要注意,你之前在处理网络请求时是在8080端口下请求,现在如果换成了 ...

  9. Sleuth+Zipkin+Log

    https://blog.csdn.net/sqzhao/article/details/70568637 https://blog.csdn.net/yejingtao703/article/det ...

  10. 05-Mysql数据库----补充内容

    数据库命名规则: 数据库命名规则: 可以由字母.数字.下划线.@.#.$ 区分大小写 唯一性 不能使用关键字如 create select 不能单独使用数字 最长128位 # 基本上跟python或者 ...