[洛谷P3865]【模板】ST表
题目大意:区间静态最大值
题解: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表的更多相关文章
- 【洛谷】【st表+模拟】P1311 选择客栈
[题目描述:] 丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号.每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0 ~ k-1 表示),且每家客栈都设有一家咖啡店,每家咖 ...
- 洛谷P3373 [模板]线段树 2(区间增减.乘 区间求和)
To 洛谷.3373 [模板]线段树2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格 ...
- [算法模板]ST表
[算法模板]ST表 ST表和线段树一样,都能解决RMQ问题(范围最值查询-Range Minimum Query). 我们开一个数组数组\(f[maxn][maxn\log_2]\)来储存数据. 定义 ...
- 洛谷 P3865 【模板】ST表
P3865 [模板]ST表 题目背景 这是一道ST表经典题——静态区间最大值 请注意最大数据时限只有0.8s,数据强度不低,请务必保证你的每次查询复杂度为 O(1)O(1) 题目描述 给定一个长度为 ...
- 洛谷—— P3865 【模板】ST表
https://www.luogu.org/problemnew/show/P3865 题目背景 这是一道ST表经典题——静态区间最大值 请注意最大数据时限只有0.8s,数据强度不低,请务必保证你的每 ...
- skkyk:题解 洛谷P3865 【【模板】ST表】
我不会ST表 智推推到这个题 发现标签中居然有线段树..? 于是贸然来了一发线段树 众所周知,线段树的查询是log(n)的 题目中"请注意最大数据时限只有0.8s,数据强度不低,请务必保证你 ...
- 洛谷 P3865 ST表
ST表 ST表的功能很简单 它是解决RMQ问题(区间最值问题)的一种强有力的工具 它可以做到O(nlogn)预处理,O(1)查询最值 是一种处理静态区间可重复计算问题的数据结构,一般也就求求最大最小值 ...
- LCT总结——概念篇+洛谷P3690[模板]Link Cut Tree(动态树)(LCT,Splay)
为了优化体验(其实是强迫症),蒟蒻把总结拆成了两篇,方便不同学习阶段的Dalao们切换. LCT总结--应用篇戳这里 概念.性质简述 首先介绍一下链剖分的概念(感谢laofu的讲课) 链剖分,是指一类 ...
- [模板]ST表浅析
ST表,稀疏表,用于求解经典的RMQ问题.即区间最值问题. Problem: 给定n个数和q个询问,对于给定的每个询问有l,r,求区间[l,r]的最大值.. Solution: 主要思想是倍增和区间d ...
随机推荐
- Django---URL、Views
1.Django URL(路由系统) URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表:你就是以这种方式告诉Djang ...
- JavaSE 第二次学习随笔(五)
/* * 中文乱码出现的情况研究 * 注意点:乱码解决的办法是再编码再解码 * 但是如果是编码出错了,无法解决.如果是解码出错了,可以利用再编码再解码 * * * 编码 解码 结果 * GBK utf ...
- 腾讯招聘网数据爬取存入mongodb
#!/user/bin/env python3 # -*- coding: utf-8 -*- import requests from lxml import etree from math imp ...
- python-time模块、sys模块、os模块以及大量实例
模块 通俗的说模块就把一个已经写好的带有可使用的函数的文件,通过文件名进行导入,然后调用里面的函数等来完成所需功能,模块封装了你需要实现功能的代码,使用者只需调用即可,简化代码量,缩短编程时间. ti ...
- Hbase数据IO
场景及方案分析 场景1:logs --> HBase logs -> flume -> hfile -> import -> HBase (实时) csv导入HBase ...
- Word 2013 无法撤销操作的错误
来自 <http://delxu.blog.51cto.com/975660/1409139> 关闭正在运行的所有程序. 按Win-R,在运行框中键入regedit,然后单击“确定”. 在 ...
- Android OpenStreetMap(OSM) 使用 osmbonuspack 进行导航
关于OpenStreetMap的介绍,国内还是很少,csdn上面有一篇,写的不错,我也就不再做重复的事情了. 这里贴出链接地址:http://blog.csdn.net/mad1989/article ...
- svn资源库url问题
今天连接svn资源库的时候一直出现 RA layer request failedsvn: Unable to connect to a repository at URL http://... sv ...
- 「题目代码」P1013~P1017(Java)
1013 C基础-求偶数和 import java.util.*; import java.io.*; import java.math.BigInteger; public class Main { ...
- K8s集群内热改代码
1.登录到k8s master服务器 $ ssh developer@XXX.XXX.X.XXX(IP地址) 2.查看服务容器所在的节点(以xx-server为例) $ kubectl get pod ...