[传送门](https://www.luogu.com.cn/problem/P38

解析

板子题最棒了
用mx[i][j]存储以i为起点,长度为2^j次方的区间内的max
分成前后两段,则可以得到递推式:

mx[i][k]=max(mx[i][k-1],mx[i+mi[k-1]][k-1]);

而关于初始化,显然:

mx[i][0]=a[i];

预处理时间复杂度为nlogn
对于任意长度[l,r]
我们可以找到不大于其长度的最大的2^k
则max[l,r]=max(mx[l][k],mx[r - (1 << k) + 1][k])
画图大概就是这样子滴:

(《神笔马良》)
用两段的最大值合并即整体的最大值
从而在O(1)的时间内完成单次询问的查询
问题解决

代码

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iostream>
#include<string>
#include<queue>
#include<vector>
using namespace std;
int n,m;
int a[100500];
int mx[100500][17];//mx[i][j]:以i起点长度为2^j次方中的max
int mi[20];
int q[100500];
void solve(){mi[0]=1;for(int i=1;i<=18;i++){mi[i]=mi[i-1] * 2;}int k=1;for(int i=1;i<=n;i++){if(mi[k]<=i) k++;q[i]=k-1;}
}
int main(){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){scanf("%d",&a[i]);mx[i][0]=a[i];}solve();for(int k=1;mi[k]<=n;k++){for(int i=1;i+(1<<k)-1<=n;i++){mx[i][k]=max(mx[i][k-1],mx[i+mi[k-1]][k-1]);//printf("%d ",mx[i][k]);}//printf("\n");}for(int k=1;k<=m;k++){int st,ed;scanf("%d%d",&st,&ed);int j=q[ed-st+1];int ans=max(mx[st][j],mx[ed-mi[j]+1][j]);printf("%d\n",ans);}return 0;
}

AC快乐!!!

倍增:st表(模板)(洛谷P3865)相关推荐

  1. 洛谷 P3865 【模板】ST表

    洛谷 P3865 [模板]ST表 题目: 因为是水题,直接丢链接了:链接 题解: 把这题丢上来的原因是因为以前学ST的时候是真的水=.=,几乎就是背代码. 现在重新看书后有了较深刻的理解: 递推时,有 ...

  2. Hash表——省市(洛谷 P3405)

    题目选自洛谷P3405 因为值和前两个字母有关系,所以对每个字符串只保留前两个字母,相当于有N个二元组 <ai,bi>,问<ai,bi> = <bi,ai> 的(i ...

  3. [最大生成树Kruskal/倍增LCA] 火车运输 洛谷P1967

    题目描述 AA 国有 nn 座城市,编号从 11 到 nn ,城市之间有 mm 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 qq 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重 ...

  4. [模板]洛谷T3379 最近公共祖先(LCA) 倍增+邻接表

    一年前听说的这东西...现在终于会了... 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> ...

  5. P7599-[APIO2021]雨林跳跃【二分,倍增,ST表】

    正题 题目链接:https://www.luogu.com.cn/problem/P7599 题目大意 nnn棵树,在某棵树上时可以选择向左右两边第一棵比它高的树跳,现在qqq次询问从[A,B][A, ...

  6. 高精度模板 洛谷Luogu P1932 A+B A-B A*B A/B Problem

    P1932 A+B & A-B & A*B & A/B Problem 题目背景 这个题目很新颖吧!!! 题目描述 求A.B的和差积商余! 输入输出格式 输入格式: 两个数两行 ...

  7. poj3264Balanced Lineup(倍增ST表)

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 52328   Accepted: 24551 ...

  8. Cantor表(洛谷-P1014)

    题目描述 现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的.他是用下面这一张表来证明这一命题的: 1/1 1/2 1/3 1/4 1/5 - 2/1 2/2 2/3 2/4 - ...

  9. 字典树模板+洛谷P2580 于是他错误的点名开始了

    题目: 题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 他会一边搓炉石一边点名以至于有一天他连续点到了某个同学两次,然后正好被路过的校长发现了然后就是一顿欧拉欧拉欧拉(详情请见已结束比赛 CON ...

最新文章

  1. TensorFlow版的“Hello World”,运行官网第一个例子
  2. 符缓冲流复制Java文件
  3. linux 怎么删除大文件,如何在Linux中删除超大的(100-200GB)文件
  4. linux下编译与运行,Linux操作系统驱动编译与运行是怎样的?
  5. Oracle修改实例名SID
  6. 今天入手了二手X61
  7. Everything 中文绿色版
  8. c语言数组回文数编写字符串,回文数C语言(示例代码)
  9. 谷歌神经网络机器翻译NMT:人人可利用TensorFlow快速建立翻译模型
  10. 高小英和张东健1998年合作出演过爱情片《恋风恋歌
  11. 四连测总结(WYL)
  12. API接口加密—非对称加密解密之分段加解密
  13. java注解约束参数为固定值_Java学习 使用注解将参数的值限定
  14. Java用户注册服务器发送短信验证码功能实现
  15. java fail 方法_java中的fail是什么意思
  16. 大数据处理基本思想——分治法
  17. 《计算广告》第一部分计算广告关键技术——笔记
  18. 宽带信号的DOA估计学习笔记(一)
  19. php高德地图手机定位,AMap3DMap_Demo
  20. 为什么劝你要学习Golang以及GO语言(Go语言知识普及)

热门文章

  1. 人生133个规则,能领悟多少算多少!!!看自己的造化!!!
  2. oracle怎么删除lob对象,Oracle系列:LOB大对象处理
  3. linux驱动内核哪个文件夹,linux设备驱动归纳总结(一):内核的相关基础概念...
  4. laravel缓存html,Laravel 静态页面缓存 JosephSilber/page-cache - 码农天地
  5. mysql5.7组复制多主一从搭建_MySql5.7-多源复制(多主单从)
  6. 俄语使用计算机怎么说,计算机俄语常用词汇
  7. ofdm解调算法_OFDM系统中固定频偏算法
  8. 问题 D: 二叉树求高度
  9. 还不会ts?一文带你打开ts的大门
  10. 谁动了我的选择器?深入理解CSS选择器优先级