luogu3865 【模板】 ST表
题目大意:给出一段序列,每次查询一段区间,求区间最大值。
ST表:设原序列为A,定义F[i][k]为A[i][2k-1]的最大值。有递归式:F[i][k]=max(F[i][k-1], F[i+2k-1][k-1])。设置F时,外层循环k,内部循环i。查询时,令k为2^k不超过r-l+1的最大k,返回max(F[l][i], F[r-i+1][i])(利用幂等操作)即可。
注意OffOne错误(看代码中的注释)。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int MAX_N = 100010, MAX_K = 17; struct ST
{
private:
int F[MAX_N][MAX_K]; public:
int A[MAX_N];
int N; void SetF()
{
for (int i = 0; i < N; i++)
F[i][0] = A[i];
for (int k = 1; (1 << k) <= N; k++)
for (int i = 0; i + (1 << k) - 1 < N; i++)//F[i][k]管理的是A[i, i+2^k-1],别忘了后面有-1
F[i][k] = max(F[i][k - 1], F[i + (1 << (k - 1))][k - 1]);//子问题只与i, k-1有关,与无关,故<<后k都要-1.
} int Query(int l, int r)
{
int i;
for (i = 0; (1 << (i + 1)) <= r - l + 1; i++);//2^k不超过r-l+1,所以<<后面i要+1.
return max(F[l][i], F[r - (1 << i) + 1][i]);//看F定义,(1<<i)后有 +1.
}
}g; int main()
{
#ifdef _DEBUG
freopen("c:\\noi\\source\\input.txt", "r", stdin);
#endif
int queryCnt;
scanf("%d%d", &g.N, &queryCnt);
for (int i = 0; i < g.N; i++)
scanf("%d", g.A + i);
g.SetF();
while (queryCnt--)
{
int l, r;
scanf("%d%d", &l, &r);
printf("%d\n", g.Query(l - 1, r - 1));
}
return 0;
}
luogu3865 【模板】 ST表的更多相关文章
- [算法模板]ST表
[算法模板]ST表 ST表和线段树一样,都能解决RMQ问题(范围最值查询-Range Minimum Query). 我们开一个数组数组\(f[maxn][maxn\log_2]\)来储存数据. 定义 ...
- [模板]ST表浅析
ST表,稀疏表,用于求解经典的RMQ问题.即区间最值问题. Problem: 给定n个数和q个询问,对于给定的每个询问有l,r,求区间[l,r]的最大值.. Solution: 主要思想是倍增和区间d ...
- 模板 ST表
ST表 询问静态最值. code: #include <iostream> #include <cstdio> using namespace std; inline int ...
- 【模板】ST表
给定一个长度为 \(N\) 的数列,和 \(M\) 次询问,求出每一次询问的区间\([l,r]\)内数字的最大值. 说明 对于30%的数据,满足: \(1 \leq N, M \leq 10 , 1≤ ...
- P3865 【模板】ST表
P3865 [模板]ST表 https://www.luogu.org/problemnew/show/P3865 题目背景 这是一道ST表经典题——静态区间最大值 请注意最大数据时限只有0.8s,数 ...
- st表模板
http://blog.csdn.net/insistgogo/article/details/9929103 这篇博客讲解的很详细了,求区间最大值也可以用st表,时间复杂度O(n log(n)),查 ...
- 【Luogu】P3865ST表模板(ST表)
题目链接 本来准备自己yy一个倍增来着,然而一看要求O1查询就怂了. ST表模板.放上代码. #include<cstdio> #include<cstdlib> #inclu ...
- 洛谷 P3865 【模板】ST表
P3865 [模板]ST表 题目背景 这是一道ST表经典题——静态区间最大值 请注意最大数据时限只有0.8s,数据强度不低,请务必保证你的每次查询复杂度为 O(1)O(1) 题目描述 给定一个长度为 ...
- 「LuoguP3865」 【模板】ST表 (线段树
题目背景 这是一道ST表经典题——静态区间最大值 请注意最大数据时限只有0.8s,数据强度不低,请务必保证你的每次查询复杂度为 O(1) 题目描述 给定一个长度为 N 的数列,和 M 次询问,求出每一 ...
随机推荐
- C - Between the Offices
Problem description As you may know, MemSQL has American offices in both San Francisco and Seattle. ...
- 初学jQuery之jQuery虚假购物车-------与真实数据无关
初学者用jquery来写仿真的购物车,确实有点恶心,那我们今天就把这万恶的购物车剖析一下,来看看到底有什么难的. 购物车的效果图 那我们先从复选框开始吧,废话不多说,上代码!! 带有序号的,都是一些分 ...
- javascript事件绑定1-模拟jquery可爱的东西
1.给对象添加事件attachEvent(兼容IE,不兼容ff.chrome) <html xmlns="http://www.w3.org/1999/xhtml"> ...
- codechef MAY18 div2 部分题解
T1 https://www.codechef.com/MAY18B/problems/RD19 刚开始zz了,其实很简单. 删除一个数不会使gcd变小,于是就只有0/1两种情况 T2 https:/ ...
- 【转载】【翻译】JavaScript Scoping and Hoisting--JS作用域和变量提升的探讨
原文链接:http://www.adequatelygood.com/2010/2/JavaScript-Scoping-and-Hoisting 你知道下面的JavaScript代码执行后会aler ...
- 安卓手机USB无法共享、上网或卡顿的解决方法
安卓手机通过USB为电脑(Windows10)提供网络接入点时,系统程序会异常卡顿. 1)设备管理器2)点击“网络适配器”,在弹出的下拉列表中选择”Remote NDIS based Internet ...
- C# Datetime 使用详解
获得当前系统时间: DateTime dt = DateTime.Now; Environment.TickCount可以得到“系统启动到现在”的毫秒值 DateTime now = DateTime ...
- webapi部署到IIS 404错误
环境:win2008r2+IIS 解决方案: 添加一个映射 可执行文件地址(根据系统决定64位可32位): C:\Windows\Microsoft.NET\Framework64\v4.0.3031 ...
- jq 获取表单所有数据
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- 数据库操作(一)DML
1.数据库 数据库可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增.查询.更新.删除等操作. 所谓“数据库”是以一定方式储存在一起.能与多个用户共享.具有尽可能小的冗余度.与 ...