倍增:st表(模板)(洛谷P3865)
[传送门](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)相关推荐
- 洛谷 P3865 【模板】ST表
洛谷 P3865 [模板]ST表 题目: 因为是水题,直接丢链接了:链接 题解: 把这题丢上来的原因是因为以前学ST的时候是真的水=.=,几乎就是背代码. 现在重新看书后有了较深刻的理解: 递推时,有 ...
- Hash表——省市(洛谷 P3405)
题目选自洛谷P3405 因为值和前两个字母有关系,所以对每个字符串只保留前两个字母,相当于有N个二元组 <ai,bi>,问<ai,bi> = <bi,ai> 的(i ...
- [最大生成树Kruskal/倍增LCA] 火车运输 洛谷P1967
题目描述 AA 国有 nn 座城市,编号从 11 到 nn ,城市之间有 mm 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 qq 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重 ...
- [模板]洛谷T3379 最近公共祖先(LCA) 倍增+邻接表
一年前听说的这东西...现在终于会了... 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> ...
- P7599-[APIO2021]雨林跳跃【二分,倍增,ST表】
正题 题目链接:https://www.luogu.com.cn/problem/P7599 题目大意 nnn棵树,在某棵树上时可以选择向左右两边第一棵比它高的树跳,现在qqq次询问从[A,B][A, ...
- 高精度模板 洛谷Luogu P1932 A+B A-B A*B A/B Problem
P1932 A+B & A-B & A*B & A/B Problem 题目背景 这个题目很新颖吧!!! 题目描述 求A.B的和差积商余! 输入输出格式 输入格式: 两个数两行 ...
- poj3264Balanced Lineup(倍增ST表)
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 52328 Accepted: 24551 ...
- Cantor表(洛谷-P1014)
题目描述 现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的.他是用下面这一张表来证明这一命题的: 1/1 1/2 1/3 1/4 1/5 - 2/1 2/2 2/3 2/4 - ...
- 字典树模板+洛谷P2580 于是他错误的点名开始了
题目: 题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 他会一边搓炉石一边点名以至于有一天他连续点到了某个同学两次,然后正好被路过的校长发现了然后就是一顿欧拉欧拉欧拉(详情请见已结束比赛 CON ...
最新文章
- TensorFlow版的“Hello World”,运行官网第一个例子
- 符缓冲流复制Java文件
- linux 怎么删除大文件,如何在Linux中删除超大的(100-200GB)文件
- linux下编译与运行,Linux操作系统驱动编译与运行是怎样的?
- Oracle修改实例名SID
- 今天入手了二手X61
- Everything 中文绿色版
- c语言数组回文数编写字符串,回文数C语言(示例代码)
- 谷歌神经网络机器翻译NMT:人人可利用TensorFlow快速建立翻译模型
- 高小英和张东健1998年合作出演过爱情片《恋风恋歌
- 四连测总结(WYL)
- API接口加密—非对称加密解密之分段加解密
- java注解约束参数为固定值_Java学习 使用注解将参数的值限定
- Java用户注册服务器发送短信验证码功能实现
- java fail 方法_java中的fail是什么意思
- 大数据处理基本思想——分治法
- 《计算广告》第一部分计算广告关键技术——笔记
- 宽带信号的DOA估计学习笔记(一)
- php高德地图手机定位,AMap3DMap_Demo
- 为什么劝你要学习Golang以及GO语言(Go语言知识普及)
热门文章
- 人生133个规则,能领悟多少算多少!!!看自己的造化!!!
- oracle怎么删除lob对象,Oracle系列:LOB大对象处理
- linux驱动内核哪个文件夹,linux设备驱动归纳总结(一):内核的相关基础概念...
- laravel缓存html,Laravel 静态页面缓存 JosephSilber/page-cache - 码农天地
- mysql5.7组复制多主一从搭建_MySql5.7-多源复制(多主单从)
- 俄语使用计算机怎么说,计算机俄语常用词汇
- ofdm解调算法_OFDM系统中固定频偏算法
- 问题 D: 二叉树求高度
- 还不会ts?一文带你打开ts的大门
- 谁动了我的选择器?深入理解CSS选择器优先级