ST表(离线RMQ)
2024-09-07 21:03:07
离线RAQ时,预处理为O(n*lgn),查询为O(1)的算法,比较有意思的一种算法
放个模板在这可以随时看
//ST表(离线)
//预处理 O(n*lgn) , 查询 O(1)
#include <iostream>
#include <stdio.h>
using namespace std;
#define MX 10005 int n;
int a[MX];
int st[MX][]; // st[i][j] 是第 i 个数为左端点长为 2^j 区间的最大值
int lgn[MX]; //lgn[i] 是 lgn(i) 的值 void Init()
{
lgn[]=-;
for (int i=;i<=n;i++)
{
if ((i&(i-))==) lgn[i]=lgn[i-]+;
else lgn[i]=lgn[i-];
st[i][]=a[i];
}
for (int i=;i<=lgn[n];i++) //区间长为 2^i 次方
for (int j=;j+(<<i)-<=n;j++)
st[j][i]=max(st[j][i-],st[j+(<<(i-))][i-]);
} int inquery(int a,int b)
{
int k = lgn[b-a+];
return max(st[a][k],st[b-(<<k)+][k]);
} int main()
{
scanf("%d",&n);
for (int i=;i<=n;i++)
scanf("%d",&a[i]);
Init();
int m;
scanf("%d",&m);
while (m--)
{
int l,r;
scanf("%d%d",&l,&r);
printf("%d\n",inquery(l,r));
}
return ;
}
最新文章
- C# 压缩文件与字节互转
- Node.js 的module 系统
- c++普通高精加
- libevent功能使用简介
- MySQL全文检索笔记 转载
- js冲突怎么解决
- PHP获取毫秒时间戳
- hdu 4778 Rabbit Kingdom(减少国家)
- ASP.NET vNext 在 Mac OS
- 输入和输出--RandomAccessFile类
- 14.并发与异步 - 2.任务Task -《果壳中的c#》
- 【Spring-Controller 整理研究】@RequestMapping略解
- 查找单链表中倒数第K个位置上的结点,若查找成功返回该节点的data域,若不成功只返回0
- 解决jsp表达式不能解析的问题
- cmd命令关闭占用程序的端口
- 共享服务Samba,实现liunx与Windows文件共享
- System.web和System.WebServer
- .net core 与ELK(4)后台运行els可视化工具和Kibana
- 【原】Ubuntu13.04安装、卸载Gnome3.8
- -174dBm的含义
热门文章
- LogManager
- react-native 模仿原生 实现下拉刷新/上拉加载更多(RefreshListView)
- MySQL 5.6数据导入报 GTID 相关错误
- Oracle创建DataBase Links
- Creating Dialogbased Windows Application (2) / 创建基于对话框的Windows应用程序(二)Button的应用、新建子窗体 / VC++, Windows
- Windows 7 SP1和Windows Server 2008 SP1的Event ID 10错误的解决方法
- GNU_MAKE--工程管理
- Magical GCD UVA 1642 利用约数个数少来优化 给定n个数,求使连续的一段序列的所有数的最大公约数*数的数量的值最大。输出这个最大值。
- .net版本和操作系统
- Windows下使用python