这是kuangbin的RMQ,一维的,代码很简洁,附上:

//kuangbin templet(查询最大值) 一维
//若想查最小,看提示更改
const int MAXN= 50000 + 9 ;
int dp[MAXN][20];//第二维是范围,即2^20约等于100万
//PS 如果同时要求最大最小,要多开一个dp2[][]来存最小
int mm[MAXN];//mm是间接存的数组

//b[]才是数据,并且b从1开始
void initRMQ(int n,int b[])
{mm[0]=-1;for (int i=1;i<=n;i++){mm[i]=((i&(i-1))==0)?mm[i-1]+1:mm[i-1];dp[i][0]=b[i];}for (int j=1;j<=mm[n];j++)for (int i=1;i+(1<<j)-1<=n;i++)dp[i][j]=max(dp[i][j-1],dp[i+(1<<(j-1))][j-1]);//PS 若最小 max 改为 min
}
int RMQ(int x,int y)
{int k=mm[y-x+1];return max(dp[x][k],dp[y-(1<<k)+1][k]);//PS 若最小 max 改为 min
}

这是一个很好的测RMQ的题:http://poj.org/problem?id=3264

附上代码,initRMQ2和RMQ2是初始化最小,和查询最小的函数。

#include <stdio.h>
#include <iostream>
using namespace std;const int INF=0x3f3f3f3f;
typedef long long ll;
#define PI(A) printf("%d\n",A)
#define SI(N) scanf("%d",&(N))
#define SII(N,M) scanf("%d%d",&(N),&(M))
#define cle(a,val) memset(a,(val),sizeof(a))
#define rep(i,b) for(int i=0;i<(b);i++)
#define Rep(i,a,b) for(int i=(a);i<=(b);i++)
#define reRep(i,a,b) for(int i=(a);i>=(b);i--)
const double EPS= 1e-9 ;/*  /     C o d i n g  S p a c e     /  *///kuangbin templet(查询最大值) 一维
//若想查最小,看提示更改
const int MAXN= 50000 + 9 ;
int dp[MAXN][20];//第二维是范围,即2^20约等于100万
int dp2[MAXN][20];
int mm[MAXN];void initRMQ(int n,int b[])
{mm[0]=-1;for (int i=1;i<=n;i++){mm[i]=((i&(i-1))==0)?mm[i-1]+1:mm[i-1];dp[i][0]=b[i];}for (int j=1;j<=mm[n];j++)for (int i=1;i+(1<<j)-1<=n;i++)dp[i][j]=max(dp[i][j-1],dp[i+(1<<(j-1))][j-1]);//PS 若最小 max 改为 min
}
int RMQ(int x,int y)
{int k=mm[y-x+1];return max(dp[x][k],dp[y-(1<<k)+1][k]);//PS 若最小 max 改为 min
}
void initRMQ2(int n,int b[])
{mm[0]=-1;for (int i=1;i<=n;i++){mm[i]=((i&(i-1))==0)?mm[i-1]+1:mm[i-1];dp2[i][0]=b[i];}for (int j=1;j<=mm[n];j++)for (int i=1;i+(1<<j)-1<=n;i++)dp2[i][j]=min(dp2[i][j-1],dp2[i+(1<<(j-1))][j-1]);//PS 若最小 max 改为 min
}
int RMQ2(int x,int y)
{int k=mm[y-x+1];return min(dp2[x][k],dp2[y-(1<<k)+1][k]);//PS 若最小 max 改为 min
}
int N,Q;
int input[MAXN];
int main()
{while(~SII(N,Q)){Rep(i,1,N) SI(input[i]);initRMQ(N,input);initRMQ2(N,input);rep(i,Q){int a,b;SII(a,b);printf("%d\n",RMQ(a,b)-RMQ2(a,b));}}return 0;
}

转载于:https://www.cnblogs.com/s1124yy/p/5688226.html

kuangbin RMQ相关推荐

  1. 【专题】用ST表解决RMQ刷题总结

    [专题]用ST表解决RMQ刷题总结 看了一下上次写博客居然是好久以前的事了(我真是老懒狗了 ) 开门见山,直接放专题链接和代码 kuangbin rmq专题 这个contest里面一共十道题但是实际上 ...

  2. 图论--LCA--在线RMQ ST

    板子测试POJ1330,一发入魂,作者是KuangBin神犇,感谢?‍ #include <cstdio> #include <cstring> #include <al ...

  3. [kuangbin]各种各样的题单

    [kuangbin]各种各样的题单 专题1 简单搜索 POJ 1321 POJ 2251 POJ 3278 POJ 3279 POJ 1426 POJ 3126 POJ 3087 POJ 3414 F ...

  4. 线段树开新坑:kuangbin带你飞

    写在最前面的废话 这里I以前的题是暑假刚刚开始的时候在家写的,然后多校一波就荒废了 9月开头回家一波,重新填坑,= =,kuangbin带你飞的pdf,这才一半题,后面还有一波,蓝瘦,慢慢写吧,不写题 ...

  5. BZOJ 2780: [Spoj]8093 Sevenk Love Oimaster( 后缀数组 + 二分 + RMQ + 树状数组 )

    全部串起来做SA, 在按字典序排序的后缀中, 包含每个询问串必定是1段连续的区间, 对每个询问串s二分+RMQ求出包含s的区间. 然后就是求区间的不同的数的个数(经典问题), sort queries ...

  6. [kuangbin带你飞]专题七线段树 更新ing

    这,先写应该再两个月之前就已经写好了,只是没有发出来,还有些题没有做,慢慢更新,一下线段树吧.其实每个专题都觉得恶心 淦 建议写的时候每个题都要自己去敲,不要直接把模板拿过来改一改 之前写的一个无任何 ...

  7. [kuangbin带你飞]专题五查并集

    写了几个查并集得题,成功把自己写晕了 之后写下面得题(写不下去了) **poj-2912 poj 文章目录 1.POJ - 1611(模板题) 2.HDU - 1213(模板题) 3.poj2236( ...

  8. 【kuangbin带你飞】专题六 最小生成树

    [kuangbin带你飞]专题六 最小生成树 A.POJ - 1251 Jungle Roads (最小生成树模板) The Head Elder of the tropical island of ...

  9. 解题报告:【kuangbin带你飞】专题四 最短路练习题

    目录 A. POJ - 2387 TiltheCowsComeHomeTil\ the\ Cows\ Come\ HomeTil the Cows Come Home--------(最短路模板题)[ ...

  10. kuangbin带你飞专题合集

    题目列表 [kuangbin带你飞]专题一 简单搜索 [kuangbin带你飞]专题二 搜索进阶 [kuangbin带你飞]专题三 Dancing Links [kuangbin带你飞]专题四 最短路 ...

最新文章

  1. Java 参数后面跟三个... 的作用
  2. 存储----DAS、SAN、NAS
  3. Java面向对象基础整理
  4. ON_NOTIFY消息中的id坑了我一天
  5. wordcloud用来制作词云
  6. lvs工作在第几层_LVS 原理(调度算法、四种模式、四层负载均衡和七层 的区别)...
  7. 【英语学习】【English L06】U04 Adventure L1 I want to watch a ballet show there
  8. 1加6投屏_6月的早餐,1杯牛奶加燕麦,营养健康又美味,饱腹感很强
  9. 笔记本电脑如何保养_笔记本电脑过热 五招教你轻松解决
  10. 使用kubeadm安装kubenetes
  11. Spring源码之FactoryBean接口的作用和实现原理
  12. 解决台式机外放和插耳机都没声音[基础版]
  13. oracle中索引的类型,oracle索引类型normal
  14. IDEA 插件开发 鼠标事件
  15. 08cms房产门户系统v8.4升级补丁支持新版APP和小程序
  16. 从平面坐标转球面坐标加旋转
  17. 谈谈JavaScript版本演进史及ES3、ES5区别和特性
  18. Element is not clickable at point,Other element would receive the click: xxx 遇到某个对象Click()不能正常使用?
  19. FastReport打印标签
  20. 认知升级|系列1|富人思维

热门文章

  1. android 开发种子文件,IT之家学院:如何制作种子文件和磁力链接
  2. 魔兽世界服务端开服架设服务器搭建教程
  3. 读书感受 之《活着》
  4. HTML5+CSS3 为图书简介页面添加图像及视频
  5. displaytag 使用
  6. 视频综合平台系统架构分析-1
  7. 微信小程序中的列表渲染
  8. Android进阶——Android无障碍服务之AccessibilityService实现微信抢红包插件
  9. 凯撒密码加密算法python_想偷WiFi?万能钥匙不行?试试python一键破解!|wifi|python|profile|算法|无线网卡...
  10. 微星主板节能模式怎么关闭_微星正设计一套易用化BIOS 根据散热器自动调节性能释放_笔记本新闻...