离线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 ;
}

最新文章

  1. C# 压缩文件与字节互转
  2. Node.js 的module 系统
  3. c++普通高精加
  4. libevent功能使用简介
  5. MySQL全文检索笔记 转载
  6. js冲突怎么解决
  7. PHP获取毫秒时间戳
  8. hdu 4778 Rabbit Kingdom(减少国家)
  9. ASP.NET vNext 在 Mac OS
  10. 输入和输出--RandomAccessFile类
  11. 14.并发与异步 - 2.任务Task -《果壳中的c#》
  12. 【Spring-Controller 整理研究】@RequestMapping略解
  13. 查找单链表中倒数第K个位置上的结点,若查找成功返回该节点的data域,若不成功只返回0
  14. 解决jsp表达式不能解析的问题
  15. cmd命令关闭占用程序的端口
  16. 共享服务Samba,实现liunx与Windows文件共享
  17. System.web和System.WebServer
  18. .net core 与ELK(4)后台运行els可视化工具和Kibana
  19. 【原】Ubuntu13.04安装、卸载Gnome3.8
  20. -174dBm的含义

热门文章

  1. LogManager
  2. react-native 模仿原生 实现下拉刷新/上拉加载更多(RefreshListView)
  3. MySQL 5.6数据导入报 GTID 相关错误
  4. Oracle创建DataBase Links
  5. Creating Dialogbased Windows Application (2) / 创建基于对话框的Windows应用程序(二)Button的应用、新建子窗体 / VC++, Windows
  6. Windows 7 SP1和Windows Server 2008 SP1的Event ID 10错误的解决方法
  7. GNU_MAKE--工程管理
  8. Magical GCD UVA 1642 利用约数个数少来优化 给定n个数,求使连续的一段序列的所有数的最大公约数*数的数量的值最大。输出这个最大值。
  9. .net版本和操作系统
  10. Windows下使用python