解题报告:poj 3264 最基本的线段树
2017-10-07 17:54:55
writer:pprp
/*
@theme: 最基本的线段树
@writer:pprp
@end:17:38
@attention:记录的数组应该从1开始,不能从0开始
*/ #include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std;
const int maxn = +;
const int INF = 0x3f3f3f3f; struct tree
{
int nmax,nmin;
int r,l;
};
tree tt[maxn*];
int nMax,nMin; int a[maxn];
void build(int l, int r, int i)
{
tt[i].l = l;
tt[i].r = r;
if(l == r)
{
tt[i].nmin = tt[i].nmax = a[l];
return;
}
int mid = (l+r)>>;
build(l,mid,*i);
build(mid+,r,*i+);
tt[i].nmin = min(tt[i<<].nmin,tt[i<<|].nmin);
tt[i].nmax = max(tt[i<<].nmax,tt[i<<|].nmax);
}
void query(int i, int l, int r)
{
if(tt[i].nmax <= nMax && tt[i].nmin >= nMin)
return ;
if(tt[i].l == l && tt[i].r == r)
{
nMax = max(tt[i].nmax,nMax);
nMin = min(tt[i].nmin,nMin);
return;
}
int mid = (tt[i].l+tt[i].r) >> ;
if(r <= mid)
query(i<<,l,r);
else if(l > mid)
query(i<<|,l,r);
else
{
query(i<<,l,mid);
query(i<<|,mid+,r);
}
} int main()
{
// freopen("in.txt","r",stdin);
cin.sync_with_stdio(false);
int n, q;
int l, r;
while(cin >> n >> q)
{
for(int i = ; i <= n ; i++)
{
cin>>a[i];
}
build(,n,);
for(int i = ; i <= q; i++)
{
cin >> l >> r;
nMax = -INF,nMin = INF;
query(,l,r); cout << nMax-nMin << endl;
}
} return ;
}
解题报告:poj 3264 最基本的线段树的更多相关文章
- POJ 3264 Balanced Lineup【线段树区间查询求最大值和最小值】
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 53703 Accepted: 25237 ...
- POJ 3264 Balanced Lineup 【线段树】
<题目链接> 题目大意: 求给定区间内最大值与最小值之差. 解题分析: 线段树水题,每个节点维护两个值,分别代表该区间的最大和最小值即可. #include <cstdio> ...
- poj 3264:Balanced Lineup(线段树,经典题)
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 32820 Accepted: 15447 ...
- poj 3264 Balanced Lineup (线段树)
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 42489 Accepted: 20000 ...
- POJ 3264 Balanced Lineup 【线段树/区间最值差】
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 62103 Accepted: 29005 Cas ...
- POJ 3264 Balanced Lineup【线段树】
题意:给出n个数,a1,a2,a3,---,an,再给出q次询问区间al到ar之间的最大值和最小值的差 学习线段树的第一道题目 学习的这一篇 http://www.cnblogs.com/kuangb ...
- POJ - 3264 Balanced Lineup(线段树或RMQ)
题意:求区间最大值-最小值. 分析: 1.线段树 #include<cstdio> #include<cstring> #include<cstdlib> #inc ...
- 暑期训练狂刷系列——poj 3264 Balanced Lineup(线段树)
题目连接: http://poj.org/problem?id=3264 题目大意: 有n个数从1开始编号,问在指定区间内,最大数与最小数的差值是多少? 解题思路: 在节点中存储max,min,然后查 ...
- POJ 3264 Balanced Lineup (线段树查找最大最小值)
http://poj.org/problem?id=3264 题意:给你一个长度为n的序列a[N] (1 ≤ N ≤ 50000),询问Q(1 ≤ Q ≤ 200000) 次,每次输出[L, R]区间 ...
随机推荐
- Spark 源码分析 -- BlockStore
BlockStore 抽象接口类, 关键get和put都有两个版本序列化, putBytes, getBytes非序列化, putValues, getValues 其中putValues的返回值为P ...
- 十个技巧迅速提升JQuery性能
本文提供即刻提升你的脚本性能的十个步骤.不用担心,这并不是什么高深的技巧.人人皆可运用!这些技巧包括: 使用最新版本 合并.最小化脚本 用for替代each 用ID替代class选择器 给选择器指定前 ...
- Android studio 使用技巧和问题
最近更新Android studio版本到1.2.1.1后 出现了一些问题,首先一个就是创建一个项目后,布局文件会提示 找不到类. 网上找了下答案,原来是这个版本的bug. 其实解决起来很简单,找到 ...
- JSONP使用
一.什么是JSONP jsonp是一种规则,它是利用创建html的script快的方式,将远端url放到src属性中,并以函数的形式执行远程返回值中的函数. jsonp的出现是为了解决浏览器同源策略的 ...
- Drainage Ditches---hdu1532(最大流, 模板)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1532 最大流模板题: EK:(复杂度为n*m*m); #include<stdio.h> ...
- 用 Python 实现每秒处理 120 万次 HTTP 请求
用 Python 做到每秒处理上百万次 HTTP 请求,可能吗?也许不能,但直到最近,这已成为现实. 很多公司都在为了提升程序的执行性能和降低服务器的运营成本,而放弃 Python 去选择其它编程语言 ...
- javascript 之 valueOf
var m = { i:10, toString:function () { console.log('toString'); return this.i; }, valueOf:function ( ...
- NSUserDefaults保存对象数组报错
在使用NSUserDefaults的时候插入数据有时候会报以下错误:Attempt to set a non-property-list objec 这种错误的原因是插入了不识别的数据类型,NSUse ...
- debian 如何切换为root用户
debian 如何切换为root用户 debian 如何切换为root用户 sudo su 输入命令后提示输入密码,输入密码切换为root用户
- C++切割字符串
std::string text = "2001_1;2005_5;"; std::stringstream ss(text); std::string sub_str; std: ...