解题报告: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源码分析 -- SchedulableBuilder
SchedulableBuilder就是对Scheduleable tree的封装, 在Pool层面(中间节点), 完成对TaskSet的调度(FIFO, FAIR) 在TaskSetManager ...
- 剑指Offer——和为S的连续正数序列
题目描述: 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久, ...
- 剑指Offer——数值的整数次方
题目描述: 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 分析: 快速幂,简单解释下, 当e的二进制为1001011, b^e=b^( ...
- IIS7.5 错误代码0x8007007e HTTP 错误 500.19
目录 问题案例 解决问题 参考资料 问题案例 今天在win2008+IIS7.5的环境中部署WCF服务后,一直出现无法打开的页面.具体错误信息如下: HTTP 错误 500.19 - Internal ...
- visual studio 2015开发nodejs教程1搭建环境
http://sailsdoc.swift.ren/ 这里有 sails中文文档 1 安装nodejsv6.10.3 下载地址 https://nodejs.org/dist/v6.10.3/nod ...
- POJ2480:Longge's problem(欧拉函数的应用)
题目链接:传送门 题目需求: Given an integer N(1 < N < 2^31),you are to calculate ∑gcd(i, N) 1<=i <=N ...
- PHP 语言结构(Language constructs)和函数的区别
相信大家经常看到对比一些PHP应用中,说用isset() 替换 strlen(),isset比strlen执行速度快等. 例子: if ( isset($username[5]) ) { // The ...
- Selenium Page Object(PO)设计模式
Webdriver UI自动化测试火了好几年了,具体怎么设计自动化测试测试工程,组织测试用例完全凭借着自己的经验和习惯. 最近忽然听说了Page Object(简称PO)火了起来,也有面试的时候被问到 ...
- json & pickle数据序列化
序列化:把内存中的数据对象变成字符串 info = { 'name':'tom', 'age':22 } f = open("test.txt","w") f. ...
- 微信小程序组件radio
表单组件radio:官方文档 Demo Code: Page({ data: { items: [ {name: 'USA', value: '美国'}, {name: 'CHN', value: ' ...