当前位置: 首页 > news >正文

RMQ算法模板

分别写了下标从0和1开始的两种

 

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<algorithm>
 4 #include<math.h>
 5 using namespace std;
 6 
 7 const int maxn=1e5+5;
 8 const int maxl=20;
 9 
10 int ma[maxn][maxl];
11 int st[maxn][maxl];
12 int a[maxn],prelog[maxn];
13 
14 void initRMQ(int n){
15     for(int i=2;i<=n;++i){
16         prelog[i]=prelog[i-1];
17         if((i&(-i))==i)prelog[i]++;
18     }
19     for(int i=1;i<=n;++i)ma[i][0]=a[i];
20     for(int j=1;(1<<j)<=n;++j){
21         for(int i=1;i+(1<<j)-1<=n;++i){
22             ma[i][j]=max(ma[i][j-1],ma[i+(1<<j-1)][j-1]);
23         }
24     }
25 }
26 
27 int askRMQ(int l,int r){
28     if(l>r)swap(l,r);
29     int k=prelog[r-l+1];
30     return max(ma[l][k],ma[r-(1<<k)+1][k]);
31 }
32 
33 
34 void initST(int n){
35     for(int i=2;i<=n;++i){
36         prelog[i]=prelog[i-1];
37         if((1<<prelog[i]+1)==i)++prelog[i];
38     }
39     for(int i=0;i<n;++i)st[i][0]=a[i];
40     for(int i=n-1;i>=0;--i){
41         for(int j=1;i+(1<<j)-1<n;++j){
42             st[i][j]=max(st[i][j-1],st[i+(1<<j-1)][j-1]);
43         }
44     }
45 }
46 
47 int askST(int l,int r){
48     if(l>r)swap(l,r);
49     int k=prelog[r-l+1];
50     return max(st[l][k],st[r-(1<<k)+1][k]);
51 }

 

转载于:https://www.cnblogs.com/cenariusxz/p/6009891.html

相关文章:

  • 自己复制粘贴出来的第一个java小程序
  • 深入浅出JVM
  • C#3.0介绍
  • CSS菜单横竖布局要点
  • XmlReader 读取器读取内存流 MemoryStream 的注意事项
  • Oracle推导参数Derived Parameter介绍
  • [转]如何进行软件需求分析
  • 虚拟机克隆后找不到eth0
  • 通过adgjmptw看产品设计的易用性
  • es6 module模块
  • Linux下流媒体服务器的搭建(HelixServer)
  • iOS-图文表并茂,手把手教你GCD
  • 昨天升级了Windows Media Player 的最新版11简体中文版
  • Java 编程技术中汉字问题的分析及解决
  • DCN无线配置
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • Javascript 原型链
  • JAVA之继承和多态
  • js ES6 求数组的交集,并集,还有差集
  • JSONP原理
  • Just for fun——迅速写完快速排序
  • 记一次用 NodeJs 实现模拟登录的思路
  • 类orAPI - 收藏集 - 掘金
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 你真的知道 == 和 equals 的区别吗?
  • 日剧·日综资源集合(建议收藏)
  • 山寨一个 Promise
  • 世界上最简单的无等待算法(getAndIncrement)
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 携程小程序初体验
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 我们雇佣了一只大猴子...
  • $.ajax中的eval及dataType
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (4.10~4.16)
  • (二)Eureka服务搭建,服务注册,服务发现
  • (分类)KNN算法- 参数调优
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (九)One-Wire总线-DS18B20
  • (一)kafka实战——kafka源码编译启动
  • **python多态
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .NET命名规范和开发约定
  • .Net中间语言BeforeFieldInit
  • .set 数据导入matlab,设置变量导入选项 - MATLAB setvaropts - MathWorks 中国
  • @Transient注解
  • [100天算法】-x 的平方根(day 61)
  • [C# 开发技巧]实现属于自己的截图工具
  • [C++]类和对象(中)
  • [CDOJ 1343] 卿学姐失恋了
  • [CQOI 2011]动态逆序对
  • [EULAR文摘] 脊柱放射学持续进展是否显著影响关节功能