hiho 1068 重新整理的 Sparse-Table(RMQ)模板
http://hihocoder.com/problemset/problem/1067
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <string>
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <set>
#include <functional>
#include <cctype>
#include <time.h> using namespace std; struct Sparse_Table {
static const int MAXN = (int)1e6+;
static const int MAXM = ; int ST[MAXM][MAXN];
int bit[MAXN];
int n; void init() { //初始化bit数组,放在程序开始的时候,只需做一次
bit[] = bit[] = bit[] = ;
for (int i = ; (i<<)<MAXN; i++)
bit[i<<] = bit[i<<|] = bit[i]+;
} void initTable(int a[], int n) {
this->n = n;
for (int i = ; i < n; i++)
ST[][i] = a[i];
int hight = bit[n];
for (int i = ; i < hight; i++)
for (int j = ; j+(<<i) < n; j++)
ST[i+][j] = min(ST[i][j], ST[i][j+(<<i)]);
} inline int Query(int l, int r) {
if (l==r) return ST[][l];
int h = bit[r-l+];
return min(ST[h][l], ST[h][r-(<<h)+]);
} void output() {
int h = bit[n];
for (int i = ; i <= h; i++) {
for (int j = ; j < n; j++)
printf("%d ", ST[i][j]);
puts("");
}
}
}; const int INF = <<;
const int MAXN = 1e6+; Sparse_Table solver;
int a[MAXN];
int n, Q; int main() {
#ifdef Phantom01
freopen("1068.txt", "r", stdin);
#endif //Phantom01 solver.init(); while (scanf("%d", &n)!=EOF) {
for (int i = ; i < n; i++) scanf("%d", &a[i]); solver.initTable(a, n);
scanf("%d", &Q);
for (int i = ; i < Q; i++) {
int l, r;
scanf("%d%d", &l, &r);
printf("%d\n", solver.Query(l-, r-));
}
} return ;
}
hiho 1068 重新整理的 Sparse-Table(RMQ)模板的更多相关文章
- RMQ ---- ST(Sparse Table)算法
[概述] RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返 ...
- RMQ(ST(Sparse Table))(转载)
1. 概述 RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A ...
- 一维二维Sparse Table
写在前面: 记录了个人的学习过程,同时方便复习 Sparse Table 有些情况,需要反复读取某个指定范围内的值而不需要修改 逐个判断区间内的每个值显然太浪费时间 我们希望用空间换取时间 ST表就是 ...
- codeforce 359D 二分+ 动态规划(sparse table)
原题链接:http://codeforces.com/problemset/problem/359/D 思路:首先对符合题目的长度(r-l)从0到n-1进行二分查找,对每一个长度进行check,看是否 ...
- Poj 3264 Balanced Lineup RMQ模板
题目链接: Poj 3264 Balanced Lineup 题目描述: 给出一个n个数的序列,有q个查询,每次查询区间[l, r]内的最大值与最小值的绝对值. 解题思路: 很模板的RMQ模板题,在这 ...
- RMQ 模板
RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为 n的数列A,回答若干次询问RMQ(i,j),返回数列A中下标在区间[i,j]中的最小/大 ...
- Zeratul的完美区间(线段树||RMQ模板题)
原题大意:原题链接 给定元素无重复数组,查询给定区间内元素是否连续 解体思路:由于无重复元素,所以如果区间内元素连续,则该区间内的最大值和最小值之差应该等于区间长度(r-l) 解法一:线段树(模板题) ...
- POJ 3264:Balanced Lineup(RMQ模板题)
http://poj.org/problem?id=3264 题意:给出n个数,还有q个询问,询问[l,r]区间里面最大值和最小值的差值. 思路:RMQ模板题,开两个数组维护最大值和最小值就行. #i ...
- POJ3264 Balanced Lineup [RMQ模板]
题意:有n头牛,输入他们的身高,求某区间身高的极值的差(max-min), 用RMQ模板,同时构造求极大值和极小值的两个数组. //poj3264 #include <iostream> ...
随机推荐
- XML学习(一)——xml内容简介
一.什么是XML xml全称为Extensible Markup Language,意思是可扩展的标记语言.XML语法上和HTML比较相似,但是HTML中的元素是固定的,而XML的标签是可以用户定义的 ...
- 忘记了本地mysql密码应该怎么找回
1. 首先以系统管理员身份登陆系统 2. 打开命令行窗口停止mysql服务 C:\>net stop mysql MySQL 服务正在停止. MySQL 服务已成功停止 3.到mys ...
- django框架-DRF工程之权限功能
1.相对于flask,原生而言django,DRF做的则更加的合理化,想要给予用户相应的权限,首先需要在settings中进行配置 REST_FRAMEWORK = { 'DEAFAULT_PERMI ...
- HTML提交表单
一.使用form提交表单 <form action="#" method="post"> {% csrf_token %} 班级<input ...
- LINUX 中 python 版本升级
首先下载源tar包 可利用linux自带下载工具wget下载,如下所示: 1 # wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tg ...
- Git日常操作指令
1. 将本地项目上传到码云: ①. 码云上创建一个项目 ②. 本地文件项目内右键git bash进入git控制台 ③. git init 命令 -- 会在本地创建一个.git文件夹 ④. git ...
- ERROR in xxxx.js from UglifyJS——配置版本混杂版
常规解决套路可以参考这篇:https://segmentfault.com/a/11... 我采用了上面的做法,依然没法解决.我采用的是vue-cli脚手架自动生成的项目结构: vue-cli版本 2 ...
- 处理Oracle 11g在用EXP导出时,空表不能导出
一.问题原因: 11G中有个新特性,当表无数据时,不分配segment,以节省空间 想要给空表也分配segmant,有以下两个办法: 1.insert一行,再rollback就产生segmen ...
- Java的TreeMap,C++的lower_bound,合并间隔
https://leetcode.com/problems/data-stream-as-disjoint-intervals/?tab=Description 这道题目是合并间隔的经典题目. htt ...
- Java设置Client Socket链接Server超时时间
Java设置Client Socket链接Server超时时间 学习了:http://blog.csdn.net/tterminator/article/details/52494141 http:/ ...