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 最基本的线段树的更多相关文章

  1. POJ 3264 Balanced Lineup【线段树区间查询求最大值和最小值】

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 53703   Accepted: 25237 ...

  2. POJ 3264 Balanced Lineup 【线段树】

    <题目链接> 题目大意: 求给定区间内最大值与最小值之差. 解题分析: 线段树水题,每个节点维护两个值,分别代表该区间的最大和最小值即可. #include <cstdio> ...

  3. poj 3264:Balanced Lineup(线段树,经典题)

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 32820   Accepted: 15447 ...

  4. poj 3264 Balanced Lineup (线段树)

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 42489   Accepted: 20000 ...

  5. POJ 3264 Balanced Lineup 【线段树/区间最值差】

    Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 62103 Accepted: 29005 Cas ...

  6. POJ 3264 Balanced Lineup【线段树】

    题意:给出n个数,a1,a2,a3,---,an,再给出q次询问区间al到ar之间的最大值和最小值的差 学习线段树的第一道题目 学习的这一篇 http://www.cnblogs.com/kuangb ...

  7. POJ - 3264 Balanced Lineup(线段树或RMQ)

    题意:求区间最大值-最小值. 分析: 1.线段树 #include<cstdio> #include<cstring> #include<cstdlib> #inc ...

  8. 暑期训练狂刷系列——poj 3264 Balanced Lineup(线段树)

    题目连接: http://poj.org/problem?id=3264 题目大意: 有n个数从1开始编号,问在指定区间内,最大数与最小数的差值是多少? 解题思路: 在节点中存储max,min,然后查 ...

  9. POJ 3264 Balanced Lineup (线段树查找最大最小值)

    http://poj.org/problem?id=3264 题意:给你一个长度为n的序列a[N] (1 ≤ N ≤ 50000),询问Q(1 ≤ Q ≤ 200000) 次,每次输出[L, R]区间 ...

随机推荐

  1. QuantStart量化交易文集

    Over the last seven years more than 200 quantitative finance articles have been written by members o ...

  2. 浅谈pipreqs组件(自动生成需要导入的模块信息)

    简介 pipreqs的作用 一起开发项目的时候总是要搭建环境和部署环境的,这个时候必须得有个python第三方包的list,一般都叫做requirements.txt. 如果一个项目使用时virtua ...

  3. 012-HQL中级2-Hive如何执行文件中的sql语句

    Hive可以运行保存在文件里面的一条或多条的语句,只要用-f参数,一般情况下,保存这些Hive查询语句的文件通常用.q或者.hql后缀名,但是这不是必须的,你也可以保存你想要的后缀名.假设test文件 ...

  4. 《浅谈CT》总结

    注明来自 http://www.ssdfans.com/?p=1941 这里说的CT,不是医院里面的CT,而是闪存的一种技术:Charge Trap. 闪存不只有Floating Gate,还有Cha ...

  5. PAT 1140 Look-and-say Sequence [比较]

    1140 Look-and-say Sequence (20 分) Look-and-say sequence is a sequence of integers as the following: ...

  6. docker——三大核心概念

    镜像.容器.仓库是docker的三大核心概念. docker镜像类似于虚拟机镜像,你可以将其理解为一个只读模板. docker容器类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用.容器是从 ...

  7. 列表中相同key的字典相加

    # 怎么把列表中相同key的字典相加,也就是id的值加id的值,doc_count的值加doc_count的值 # 目标列表 l=[{'id': 5, 'doc_count': 129}, {'id' ...

  8. matlab和mathematics最新的FTP地址

    https://dio.obspm.fr/interne/logiciels/matlab/ 分享一个地址,非常好的FTP网站.

  9. [转]madwifi无线网卡源代码阅读

    转自:http://xiyong8260.blog.163.com/blog/static/66514621200892465922669/ 在我的Doctor课题研究中,基于ARF协议设计了一个改进 ...

  10. ElasticSearch的x-pack配置查询

    ElasticSearch在安装完x-pack后, 存在客户端通过Transport访问ES出现异常:java.lang.IllegalArgumentException: Unknown Named ...