RMQ算法模板
分别写了下标从0和1开始的两种
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
using namespace std; const int maxn=1e5+;
const int maxl=; int ma[maxn][maxl];
int st[maxn][maxl];
int a[maxn],prelog[maxn]; void initRMQ(int n){
for(int i=;i<=n;++i){
prelog[i]=prelog[i-];
if((i&(-i))==i)prelog[i]++;
}
for(int i=;i<=n;++i)ma[i][]=a[i];
for(int j=;(<<j)<=n;++j){
for(int i=;i+(<<j)-<=n;++i){
ma[i][j]=max(ma[i][j-],ma[i+(<<j-)][j-]);
}
}
} int askRMQ(int l,int r){
if(l>r)swap(l,r);
int k=prelog[r-l+];
return max(ma[l][k],ma[r-(<<k)+][k]);
} void initST(int n){
for(int i=;i<=n;++i){
prelog[i]=prelog[i-];
if((<<prelog[i]+)==i)++prelog[i];
}
for(int i=;i<n;++i)st[i][]=a[i];
for(int i=n-;i>=;--i){
for(int j=;i+(<<j)-<n;++j){
st[i][j]=max(st[i][j-],st[i+(<<j-)][j-]);
}
}
} int askST(int l,int r){
if(l>r)swap(l,r);
int k=prelog[r-l+];
return max(st[l][k],st[r-(<<k)+][k]);
}
RMQ算法模板的更多相关文章
- poj 3264 Balanced Lineup (RMQ算法 模板题)
RMQ支持操作: Query(L, R): 计算Min{a[L],a[L+1], a[R]}. 预处理时间是O(nlogn), 查询只需 O(1). RMQ问题 用于求给定区间内的最大值/最小值问题 ...
- 线段树:CDOJ1591-An easy problem A (RMQ算法和最简单的线段树模板)
An easy problem A Time Limit: 1000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Pr ...
- [算法模板]ST表
[算法模板]ST表 ST表和线段树一样,都能解决RMQ问题(范围最值查询-Range Minimum Query). 我们开一个数组数组\(f[maxn][maxn\log_2]\)来储存数据. 定义 ...
- 匈牙利 算法&模板
匈牙利 算法 一. 算法简介 匈牙利算法是由匈牙利数学家Edmonds于1965年提出.该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法. 二分图的定义: 设G=(V,E)是一个 ...
- Tarjan 算法&模板
Tarjan 算法 一.算法简介 Tarjan 算法一种由Robert Tarjan提出的求解有向图强连通分量的算法,它能做到线性时间的复杂度. 我们定义: 如果两个顶点可以相互通达,则称两个顶点强连 ...
- hdu 2255 奔小康赚大钱--KM算法模板
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 题意:有N个人跟N个房子,每个人跟房子都有一定的距离,现在要让这N个人全部回到N个房子里面去,要 ...
- POJ 1273 Drainage Ditches(网络流dinic算法模板)
POJ 1273给出M条边,N个点,求源点1到汇点N的最大流量. 本文主要就是附上dinic的模板,供以后参考. #include <iostream> #include <stdi ...
- poj 1274 The Perfect Stall【匈牙利算法模板题】
The Perfect Stall Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 20874 Accepted: 942 ...
- RMQ算法讲解
RMQ算法 引入: 例1.题目描述 输入N个数和M次询问,每次询问一个区间[L,R],求第L个数到R个数之间的最大值. 第一种方法:大暴力之术. 但是……时间复杂度最坏会达到 $O(NM)$,一半 ...
随机推荐
- install vim-powerline
1, install pip dnf install python-pip 2,install powerline-status pip install git+git://github.com/Lo ...
- run VLC in root
sed -i 's/geteuid/getppid/' /usr/bin/vlc
- Ubuntu下freeradius-server的安装与mysql-server的关联
1.创建freeradius数据库 #service mysql start ... #mysql -u root -p Enter password: 456456 ... mysql> cr ...
- knockout应用开发指南(完整版)
http://www.cnblogs.com/TomXu/archive/2011/11/21/2257154.html
- GridView在ScrollView中实现在家更多
这个本身会有bug 应该在滑动监听中作出判断的 <?xml version="1.0" encoding="utf-8"?><Relativ ...
- String类型和基本数据类型之间的转换
Java 中基本类型和字符串之间的转换 在程序开发中,我们经常需要在基本数据类型和字符串之间进行转换. 其中,基本类型转换为字符串有三种方法: 1. 使用包装类的 toString() 方法 2. 使 ...
- Android深度探索--HAL与驱动开发----第二章读书笔记
1. 底层开发工具包括: JDk6或者以上版本:Eclipse3.4或以上版本:ADT(用于开发Android应用程序),CDT(用于开发AndroidNDK程序):Android SDK:Andro ...
- 将JavaScript 插入网页的方法
将JavaScript 插入网页的方法 使用Javascript代码. 插入JavaScript 与在网页中插入CSS的方式相似.使用下面的代码可以在网页中插入JavaScript: ... 其中的. ...
- android基础(五)网络编程
android 的网络编程一般可以分为两种:基于Socket的,基于Http的. 一.socket与Http socket封装了TCP/IP协议,TPC/IP协议是传输层协议,主要解决数据如何在网络中 ...
- HTML之iframe
iframe:是框架的一种形式. 属性: frameborder=0/1 表示是否显示周围边框 0--否 1--是 width,height:设置的边框宽高,具体数值不需要加单位,也可用百分比 mar ...