RMQ算法之Sparse Table算法
来源:互联网 发布:网络营销策划什么意思 编辑:程序博客网 时间:2024/06/05 13:36
目标算法:Sparse Table算法
应用范围:RMQ
#include<cstdio>#include<iostream>#include<algorithm>#include<cmath>using namespace std;const int maxn = 50005;int dpmax[maxn][20];int dpmin[maxn][20];int a[maxn];int n,m;void InitRmq(){ for(int i=0;i<n;i++) { dpmax[i][0] = a[i]; dpmin[i][0] = a[i]; } for(int j=1;(1<<j)<=n;j++) { for(int i=0;i+(1<<j)-1<n;i++) { dpmax[i][j] = max(dpmax[i][j-1],dpmax[i+(1<<(j-1))][j-1]); dpmin[i][j] = min(dpmin[i][j-1],dpmin[i+(1<<(j-1))][j-1]); } }}int getMax(int x,int y){ int k = (int)(log(y-x+1.0)/log(2.0)); return max(dpmax[x][k],dpmax[y-(1<<k)+1][k]);}int getMin(int x,int y){ int k = (int)(log(y-x+1.0)/log(2.0)); return min(dpmin[x][k],dpmin[y-(1<<k)+1][k]);}int main(){ while(~scanf("%d%d",&n,&m)) { for(int i=0;i<n;i++) { scanf("%d",&a[i]); } InitRmq(); for(int i=0;i<m;i++) { int x,y; scanf("%d%d",&x,&y); printf("%d\n",getMax(x-1,y-1)-getMin(x-1,y-1)); } }}
0 0
- RMQ算法之Sparse Table算法
- RMQ算法 - Sparse-Table
- RMQ问题之Sparse-Table算法
- RMQ问题之Sparse-Table算法
- Sparse Table算法(求解RMQ)
- 区间最小值查询,RMQ,Sparse-Table算法
- 静态RMQ的Sparse Table算法
- RMQ问题的Sparse-Table算法
- RMQ问题--ST算法(Sparse Table)
- RMQ问题 —— Sparse-Table算法
- RMQ问题——sparse-table算法
- RMQ问题----ST(Sparse-Table)算法
- RMQ问题----ST(Sparse-Table)算法
- ST(Sparse Table)算法求解RMQ问题
- 算法 RMQ(Range Minimum Query)问题:Sparse-Table算法
- Sparse Table算法 - RMQ问题的简单高效算法
- 数据结构与算法系列----Sparse Table算法(RMQ问题)
- Range Minimum/Maximum Query (RMQ) - Sparse Table 算法
- 你的产品没有一炮而红,后面该怎么办?
- 安卓实用方法,类,接口
- java 采用MD5加密解密
- luci流程简介
- UVA 10791 Minimum Sum LCM(质因数分解+数学分析)
- RMQ算法之Sparse Table算法
- HDU 5442 Favorite Donut(最大表示法)
- Kali Linux 支持 pecl
- TCP/IP、Http、Socket的区别
- java 抽象类
- 计算某年的1月1号是星期几
- POJ 1125 可不可能遍历所有点情况下的最短路径
- ANDROID SDK体系介绍
- ice安装及配置