问题类型:是多次询问一个大区间里子区间的最值问题

dp + 位运算的思想处理

rmax[i][j]表示从i开始到i + 2^j - 1的区间里的最大值
dp[i][j] ==== (i,i + 2^j - 1)
分为

dp[i][j-1] === (i,i + 2^(j-1) - 1)
dp[i + 1 << (j-1))][j-1] === (i + 2^(j-1),i + 2^j - 1)

所以初始处理就比较明显了

int rmax[maxn][20];
int rmin[maxn][20];
int a[maxn];
int n,m;
void rmq(int flag)
{
for(int i = 1;i <= n;i++)
{
rmax[i][0] = rmin[i][0] = a[i];
}
for(int j = 1;(1 << j) <= n;j++)
{
for(int i = 1;i + (1 << j) - 1 <= n;i++)
{
if(flag)
rmax[i][j] = max(rmax[i][j-1],rmax[i + (1 << (j-1))][j-1]);
else
rmin[i][j] = min(rmin[i][j-1],rmin[i+(1<<(j-1))][j-1]);
}
}
}

外层循环是跨度,很明显,因为他是基础

查询算法,求出最小分割区间k,覆盖l,r

int main()
{
while(~scanf("%d%d",&n,&m))
{
for(int i = 1;i <= n;i++)
scanf("%d",&a[i]);
rmq(1);
rmq(0);
int l,r;
for(int i = 1;i <= m;i++)
{
scanf("%d%d",&l,&r);
int k = 0;
while(1 << (k + 1) <= r - l + 1)
k++;
int ansmax = max(rmax[l][k] , rmax[r - (1 << k) + 1][k]);
int ansmin = min(rmin[l][k] , rmin[r - (1 << k) + 1][k]);
printf("%d\n",ansmax - ansmin);
}
}
return 0;
}

RMQ算法区间最值的更多相关文章

  1. RMQ求区间最值 nlog(n)

    转载于:http://blog.csdn.net/xuzengqiang/article/details/7350465 RMQ算法全称为(Range Minimum/Maximum Query)意思 ...

  2. 【RMQ】 区间最值查询详解

    1. 概述 RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A ...

  3. 基于稀疏表(Sparse Table)的RMQ(区间最值问题)

    在RMQ的其他实现方法中,有一种叫做ST的算法比较常见. [构建] dp[i][j]表示的是从i起连续的2j个数xi,xi+1,xi+2,...xi+2j-1( 区间为[i,i+2j-1] )的最值. ...

  4. ST表 求 RMQ(区间最值)

    RMQ即Range Minimum/Maximun Query,中文意思:查询一个区间的最小值/最大值 比如有这样一个数组:A{3 2 4 5 6 8 1 2 9 7},然后问你若干问题: 数组A下标 ...

  5. hdu3183 rmq求区间最值的下标

    两个月前做的题,以后可以看看,是rmq关于求区间最值的下标 /* hdu3183 终点 给一个整数,可以删除m位,留下的数字形成一个新的整数 rmq 取n-m个数,使形成的数最小 */ #includ ...

  6. RMQ st算法 区间最值模板

    #include<bits/stdc++.h> ; ; int f[N][Logn],a[N],lg[N],n,m; int main(){ cin>>n>>m; ...

  7. 【模板】 RMQ求区间最值

    RMQ RMQ简单来说就是求区间的最大值(最小值) 核心算法:动态规划 RMQ(以下以求最大值为例) F[i,j]表示 从 i 开始 到i+2j -1这个区间中的最大值 状态转移方程 F[i,j]=m ...

  8. HDU 5289 Assignment (ST算法区间最值+二分)

    题目链接:pid=5289">http://acm.hdu.edu.cn/showproblem.php?pid=5289 题面: Assignment Time Limit: 400 ...

  9. nyoj 119士兵杀敌(三)(线段树区间最值查询,RMQ算法)

    题目119 题目信息 执行结果 本题排行 讨论区 士兵杀敌(三) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描写叙述 南将军统率着N个士兵,士兵分别编号为1~N,南将军常 ...

随机推荐

  1. andorid 列表视图之SimpleAdapter

    .xml <?xml version="1.0" encoding="utf-8"?> <ListView xmlns:android=&qu ...

  2. iOS.Crash.OniOS8.WhenCall[popToRootViewController]

    系统iOS 8.x, ARC. CrashCase: 在UIViewController中有一个类型为UIScrollView的实例变量scrollView, 点击UIViewController中的 ...

  3. 201621123008 《Java程序设计》第14周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结与数据库相关内容. 2. 使用数据库技术改造你的系统 2.1 简述如何使用数据库技术改造你的系统.要建立什么表?截图你的表设计. 分 ...

  4. Tomcat+Redis+Nginx实现session共享(Windows版)

    redis安装:xx nginx安装:xx 步骤: 1.下载tomcat-redis-session-manager相应的jar包,主要有三个: wget https://github.com/dow ...

  5. 【UI测试】--易用性

  6. Elastix GOIP 网关配合

    方案一 Gateway disallow=allallow=alaw&ulawcanreinvite=nodtmfmode=rfc2833host=192.168.1.108insecure= ...

  7. H.264, MPEG4之间的关系

    百度百科搜索 H.264 H.264是国际标准化组织(ISO)和国际电信联盟(ITU)共同提出的继MPEG4之后的新一代数字视频压缩格式.H.264是ITU-T以H.26x系列为名称命名的视频编解码技 ...

  8. SpringMVC学习八 @ResponseBody注解

    (一)在方法上只有@RequestMapping 时,无论方法返回值是什么认为需要跳转,代码实例如下 @RequestMapping("demo10") public People ...

  9. keras框架的CNN手写数字识别MNIST

    参考:林大贵.TensorFlow+Keras深度学习人工智能实践应用[M].北京:清华大学出版社,2018. 首先在命令行中写入 activate tensorflow和jupyter notebo ...

  10. 如何查看Python内置模块的实现代码

    方法1:使用help(random) >>> import random >>> help(random) Help on module random: NAME ...