POJ 3264 Balanced Lineup (线段树)
Balanced Lineup
For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line up in the same order. One day Farmer John decides to organize a game of Ultimate Frisbee with some of the cows. To keep things simple, he will take a contiguous range of cows from the milking lineup to play the game. However, for all the cows to have fun they should not differ too much in height.
Farmer John has made a list of Q (1 ≤ Q ≤ 200,000) potential groups of cows and their heights (1 ≤ height ≤ 1,000,000). For each group, he wants your help to determine the difference in height between the shortest and the tallest cow in the group.
Input
Lines 2..
N+1: Line
i+1 contains a single integer that is the height of cow
i
Lines
N+2..
N+
Q+1: Two integers
A and
B (1 ≤
A ≤
B ≤
N), representing the range of cows from
A to
B inclusive.
Output
Q: Each line contains a single integer that is a response
to a reply and indicates the difference in height between the tallest
and shortest cow in the range.
Sample Input
6 3
1
7
3
4
2
5
1 5
4 6
2 2
Sample Output
6
3
0
题意:问你[l r]区间最大值-最小值多少
记得写过 今天给学弟写 自己无聊 写了一遍
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<string.h>
#include<set>
#include<vector>
#include<queue>
#include<stack>
#include<map>
#include<cmath>
typedef long long ll;
typedef unsigned long long LL;
using namespace std;
const double PI=acos(-1.0);
const double eps=0.0000000001;
const int N=+;
const int INF=1e9;
int a[N];
struct node{
int l,r;
int maxx,minn;
int val;
}tree[N*];
void build(int left,int right,int pos){
tree[pos].l=left;
tree[pos].r=right;
tree[pos].val=tree[pos].maxx=;
tree[pos].minn=INF;
int mid=(tree[pos].l+tree[pos].r)>>;
if(tree[pos].l==tree[pos].r){
return ;
}
build(left,mid,pos<<);
build(mid+,right,pos<<|);
}
void update(int left,int right,int pos,int x,int y){
int mid=(left+right)>>;
if(tree[pos].l==x&&tree[pos].r==x){
tree[pos].val=y;
tree[pos].minn=y;
tree[pos].maxx=y;
return;
}
if(x>mid)update(mid+,right,pos<<|,x,y);
else
update(left,mid,pos<<,x,y);
tree[pos].maxx=max(tree[pos<<].maxx,tree[pos<<|].maxx);
tree[pos].minn=min(tree[pos<<].minn,tree[pos<<|].minn);
return ; }
int maxx;
int minn;
int query(int pos,int x,int y){
if(x==tree[pos].l&&tree[pos].r==y){
//cout<<4<<endl;
//cout<<tree[pos].maxx<<" "<<tree[pos].minn<<endl;
minn=min(minn,tree[pos].minn);
maxx=max(maxx,tree[pos].maxx);
return ;
}
int mid=(tree[pos].l+tree[pos].r)>>;
if(x>tree[pos].r||y<tree[pos].l)return ;
else if(x>mid)query(pos<<|,x,y);
else if(y<=mid)query(pos<<,x,y);
else{
query(pos<<|,mid+,y);
query(pos<<,x,mid);
}
return ;
}
int main(){
int n,q;
scanf("%d%d",&n,&q);
build(,n,);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
update(,n,,i,a[i]);
}
while(q--){
maxx=;
minn=INF;
//cout<<minn<<" "<<maxx<<endl;
int x,y;
scanf("%d%d",&x,&y);
query(,x,y);
cout<<maxx-minn<<endl;
}
}
POJ 3264 Balanced Lineup (线段树)的更多相关文章
- [POJ] 3264 Balanced Lineup [线段树]
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 34306 Accepted: 16137 ...
- poj 3264 Balanced Lineup(线段树、RMQ)
题目链接: http://poj.org/problem?id=3264 思路分析: 典型的区间统计问题,要求求出某段区间中的极值,可以使用线段树求解. 在线段树结点中存储区间中的最小值与最大值:查询 ...
- POJ 3264 Balanced Lineup 线段树RMQ
http://poj.org/problem?id=3264 题目大意: 给定N个数,还有Q个询问,求每个询问中给定的区间[a,b]中最大值和最小值之差. 思路: 依旧是线段树水题~ #include ...
- POJ 3264 Balanced Lineup 线段树 第三题
Balanced Lineup Description For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line ...
- POJ - 3264 Balanced Lineup 线段树解RMQ
这个题目是一个典型的RMQ问题,给定一个整数序列,1~N,然后进行Q次询问,每次给定两个整数A,B,(1<=A<=B<=N),求给定的范围内,最大和最小值之差. 解法一:这个是最初的 ...
- 【POJ】3264 Balanced Lineup ——线段树 区间最值
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 34140 Accepted: 16044 ...
- Poj 3264 Balanced Lineup RMQ模板
题目链接: Poj 3264 Balanced Lineup 题目描述: 给出一个n个数的序列,有q个查询,每次查询区间[l, r]内的最大值与最小值的绝对值. 解题思路: 很模板的RMQ模板题,在这 ...
- POJ 3264 Balanced Lineup【线段树区间查询求最大值和最小值】
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 53703 Accepted: 25237 ...
- POJ 3264 Balanced Lineup 【ST表 静态RMQ】
传送门:http://poj.org/problem?id=3264 Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total S ...
随机推荐
- PAT甲级1016Phone Bills
#include<iostream> #include<cstdio> #include<cstdlib> #include<vector> #incl ...
- Git 分支创建
分支策略:git上始终保持两个分支,master分支与develop分支.master分支主要用于发布时使用,而develop分支主要用于开发使用. 创建master的分支developgit che ...
- Android中Adapter和Bridge模式理解和应用
一 Adapter模式 意图: 将一个类的接口转换成客户希望的另外一个接口. Adapter模式使得原本由于接口不兼容而不能在一起工作的那些类可以在一起工作. 适用性: 使用一个已存在的类,而它的接口 ...
- Quartz.NET 定时任务使用
class Program { static void Main(string[] args) { StartJob(); Console.ReadKey(); } static void Start ...
- 2018.03.04 晚上Atcoder比赛
C - March Time limit : 2sec / Memory limit : 256MB Score : 300 points Problem Statement There are N ...
- 19.理解slop
主要知识点: slop的含义(内在原理) slop的用法 一.slop的含义是什么? query string(搜索文本)中的几个term,要经过几次移动才能与一个document匹配 ...
- hadoop datanode usages方差算法
stdDev 标准差(方差) 阐述及应用 简单来说,标准差是一组数值自平均值分散开来的程度的一种测量观念.一个较大的标准差,代表大部分的数值和其平均值之间差异较大:一个较小的标准差,代表这些数值较接近 ...
- 清北学堂模拟赛d1t4 一道图论好题(graph)
题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图,不仅有边权还有点权. LYK给出了一个子图的定义,一张图G’={V’,E’}被称作G的子图,当且仅当 ·G ...
- sicily 10330. Cutting Sausages
#include<stdio.h> int main() { int n,m,j,k; while(scanf("%d%d",&n,&m)! ...
- [转]wcf系列学习——服务托管
今天是系列的终结篇,当然要分享一下wcf的托管方面的知识. wcf中托管服务一般有一下四种: Console寄宿: 利于开发调试,但不是生产环境中的最佳实践. winform寄 ...