ST表模板 Balanced Lineup POJ3264
http://poj.org/problem?id=3264
题意 rmq max min之差
模板:
#define _CRT_SECURE_NO_WARNINGS
#include<cmath>
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
#define rep(i,t,n) for(int i =(t);i<=(n);++i)
#define per(i,n,t) for(int i =(n);i>=(t);--i)
#define mmm(a,b) memset(a,b,sizeof(a))
const int maxn = 5e5 + ;
int cow[maxn], minc[maxn][], maxc[maxn][];
int n, q; void STinit() {
int LOG;
rep(i, , n)minc[i][] = maxc[i][] = cow[i];
LOG = int(log(1.0*n) / log(1.0 * ));
rep(i,,LOG)
per(j, n, ) {
maxc[j][i] = maxc[j][i - ];
if (j + ( << (i - )) <= n)
maxc[j][i] = max(maxc[j][i], maxc[j + ( << (i - ))][i - ]);
minc[j][i] = minc[j][i - ];
if (j + ( << (i - )) <= n)
minc[j][i] = min(minc[j][i], minc[j + ( << (i - ))][i - ]);
}
}
int RMQmax(int l,int r) {
int n = r - l + ;
int LOG = int(log(1.0*n) / log(1.0 * ));
return max(maxc[l][LOG], maxc[r -( << LOG)+][LOG]);
}
int RMQmin(int l, int r) {
int n = r - l + ;
int LOG = int(log(1.0*n) / log(1.0 * ));
return min(minc[l][LOG], minc[r -( << LOG)+][LOG]);
}
int main() {
cin >> n>>q; rep(i, , n)scanf("%d", &cow[i]);
STinit();
rep(i, , q) {
int l, r;
scanf("%d%d", &l, &r); printf("%d\n", RMQmax(l, r) - RMQmin(l, r));
}
cin >> n;
return ;
}
ST表模板 Balanced Lineup POJ3264的更多相关文章
- Balanced Lineup poj3264 线段树
Balanced Lineup poj3264 线段树 题意 一串数,求出某个区间的最大值和最小值之间的差 解题思路 使用线段树,来维护最大值和最小值,使用两个查询函数,一个查区间最大值,一个查区间最 ...
- Luogu P2880 [USACO07JAN]平衡的阵容Balanced Lineup (ST表模板)
传送门(ST表裸题) ST表是一种很优雅的算法,用于求静态RMQ 数组l[i][j]表示从i开始,长度为2^j的序列中的最大值 注意事项: 1.核心部分: ; (<<j) <= n; ...
- 洛谷 P2880 [USACO07JAN]Balanced Lineup G (ST表模板)
题意:给你一组数,询问\(q\)次,问所给区间内的最大值和最小值的差. 题解:经典RMQ问题,用st表维护两个数组分别记录最大值和最小值然后直接查询输出就好了 代码: int n,q; int a[N ...
- st表模板
http://blog.csdn.net/insistgogo/article/details/9929103 这篇博客讲解的很详细了,求区间最大值也可以用st表,时间复杂度O(n log(n)),查 ...
- 收藏一个ST表模板
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #i ...
- G - Balanced Lineup - poj3264(区间查询)
题意:给你一组值,然后询问某个区间的最大值和最小值得差 分析:因为没有更新,所以只需要查找即可,节点保存一个最大值最小值就行了 ************************************ ...
- 51nod(1174 区间中最大的数)(ST表模板题)
1174 区间中最大的数 1.0 秒 131,072.0 KB 0 分 基础题 给出一个有N个数的序列,编号0 - N - 1.进行Q次查询,查询编号i至j的所有数中,最大的数是多少. 例如: 1 ...
- Balanced Lineup -POJ3264
题意: 告诉你n头奶牛的高度,然后给你一个区间,你需要求出这个区间最高的奶牛与最矮的奶牛之间相差多少 链接:http://poj.org/problem?id=3264 思路: 线段树区间查询,用两个 ...
- POJ 3264 Balanced Lineup | st表
题意: 求区间max-min st表模板 #include<cstdio> #include<algorithm> #include<cstring> #inclu ...
随机推荐
- Java定时任务示例
package com.my.timer; import java.util.Date; import java.util.TimerTask; public class myTask extends ...
- Ubuntu 13.10 安装Terminalx 后更改默认终端设置
1.安装 terminalx, sudo apt-get install terminator 2.Ctrl+ Alt + t 试一下打开什么终端,我的默认启动的是Terminator;如果想换换默认 ...
- 为何float有效位数为7位?
为何float有效位数为7位? 首先我们应该明确一点:C语言中,%f表示保留7位有效数字7位有效数字: 是指 整数部分 和小数部分一共7位 单精度数的尾数用23位存储,加上默认的小数点前的1位1,2^ ...
- 物联网架构成长之路(18)-接阿里云OSS服务
1.申请/购买OSS服务 在阿里云上申请/购买OSS服务, 然后在会得AccessKeyID,AccessKeySecret,bucketName 这三个东西 2.增删改查 在pom.xml文件上增加 ...
- Socket网络编程--简单Web服务器(5)
这一小节我们将实现服务器对get和post的请求进行对cgi程序的调用.对于web服务器以前的章节已经实现了对get和post请求的调用接口,接下来给出对应接口的实现. int WebServer:: ...
- vue弹框,删除元素
1.效果 2.index.html <!DOCTYPE html> <html lang="en"> <head> <meta chars ...
- sql操作总结
SQL 语句的多表查询方式例如:按照 department_id 查询 employees(员工表)和 departments(部门表)的信息.方式一(通用型):SELECT ... FROM ... ...
- 【Matplotlib】利用Python进行绘图
[Matplotlib] 教程:https://morvanzhou.github.io/tutorials/data-manipulation/plt/ 官方文档:https://matplotli ...
- Java知多少(6)第一个程序示例
跟随世界潮流,第一个Java程序输出“Hell World!”. 通过Eclipse运行程序 启动Eclipse,在菜单中选择“文件 --> 新建 --> Java项目”,弹出对话框: 图 ...
- ORA-00257:archiver error问题处理方法
原文链接:http://www.7747.net/database/201109/104615.html ORA-00257: archiver error. Connect internal onl ...