数据结构:ST表(可维护区间RMQ)
2020-07-26 22:03
183 查看
#include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<string> using namespace std; const int maxn=1e5+10; int a[maxn][30],logg[maxn],bin[maxn]; int i,j,k,m,n,o,p,js,jl,x,y,t,lg; inline int read() { int x=0,f=1;char ch=getchar(); while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();} while (isdigit(ch)){x=x*10+ch-48;ch=getchar();} return x*f; } int my_max(int x,int y){ if(x>y)return(x); else return(y); } int main(){ // freopen("1.out","w",stdout); scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) a[i][0]=read(); bin[0]=1; for(int i=1;i<=30;i++) bin[i]=bin[i-1]*2; logg[0]=-1; for(int i=1;i<=n;i++) logg[i]=logg[i/2]+1; for(int i=1;i<=logg[n];i++){ for(int j=1;j<=n;j++){ if(j+bin[i]-1<=n){ a[j][i]=my_max(a[j][i-1],a[j+bin[i-1]][i-1]); } } } for(int i=1;i<=m;i++){ x=read();y=read(); t=y-x+1; lg=logg[t]; printf("%d\n",my_max(a[x][lg],a[y-bin[lg]+1][lg])); } return 0; }
相关文章推荐
- 【数据结构与算法】RMQ+ST及线段树
- 【Codeforces Round 169 (Div 2) E】【数据结构区间维护】Little Girl and Problem on Trees 大菊花树的距离性修改查询
- RMQ之ST表维护区间极值
- POJ3368-Frequent values-RMQ(ST)(处理数据)
- 【暑假】[实用数据结构]范围最小值问题(RMQ)
- HiHo #1068 : RMQ-ST算法 【ST求区间最值】
- 5-14 数据结构啊poi W.区间对
- 数据结构:线段树——求区间N次方和
- 数据结构作业:利用中序遍历和后序遍历构建二叉树(RMQ转LCA)
- (Relax 线段树1.1)POJ 3468 A Simple Problem with Integers(线段树子区间更新的维护:集中更新和动态统计子序列中的数据)
- 求解区间最值 - RMQ - ST 算法
- 数据结构删除单链表中指定区间的结点(c语言)
- 求解区间最值 - RMQ - ST 算法介绍
- 数据结构:线段树——区间最长连续子序列
- RMQ(模板 ST 区间最值,频繁的间隔时间)
- poj 3264 Balanced Lineup【RMQ-ST查询区间最大最小值之差 +模板应用】
- 数据结构——RMQ(范围最小值查询)
- RMQ+ST 区间最值/区间最多频次
- 【暑假】[实用数据结构]范围最小值问题(RMQ)
- 数据结构—Problem B: 删除区间内的元素(线性表)