POJ 3264 Balanced Lineup【简单线段树,区间最值,无更新】
来源:互联网 发布:树洞表白墙源码 编辑:程序博客网 时间:2024/05/17 22:54
Description
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
Sample Input
6 31734251 54 62 2
Sample Output
630
Source
原题链接:http://poj.org/problem?id=3264
简单线段树,区间最值之差,没有更新。
注意细节呀。。。
AC代码:
#include <iostream>#include <cstdio>#include <algorithm>using namespace std;const int maxn=50000+5;int a[maxn];struct Node{ int l,r,minn,maxx;}node[maxn<<2];void PushUp(int k){ node[k].maxx=max(node[k<<1].maxx,node[k<<1|1].maxx); node[k].minn=min(node[k<<1].minn,node[k<<1|1].minn);}void BuildTree(int l,int r,int k){ node[k].l=l; node[k].r=r; if(l==r) { node[k].maxx=node[k].minn=a[l]; return; } int mid=(l+r)>>1; BuildTree(l,mid,k<<1); BuildTree(mid+1,r,k<<1|1); PushUp(k);}int QueryTree(int l,int r,int k,bool flag)//flag=true maxx{ //cout<<l<<","<<r<<","<<k<<","<<flag<<endl; if(node[k].l==l&&node[k].r==r) { if(flag) return node[k].maxx; else return node[k].minn; } int mid=(node[k].l+node[k].r)>>1; if(r<=mid) QueryTree(l,r,k<<1,flag); else if(l>mid) QueryTree(l,r,k<<1|1,flag); else { if(flag) return max(QueryTree(l,mid,k<<1,flag),QueryTree(mid+1,r,k<<1|1,flag)); else return min(QueryTree(l,mid,k<<1,flag),QueryTree(mid+1,r,k<<1|1,flag)); }}int main(){ int n,m; while(cin>>n>>m) { for(int i=1;i<=n;i++) scanf("%d",&a[i]); BuildTree(1,n,1); int x,y; while(m--) { scanf("%d%d",&x,&y); int ans=QueryTree(x,y,1,true)-QueryTree(x,y,1,false); printf("%d\n",ans); } } return 0;}
- POJ 3264 Balanced Lineup【简单线段树,区间最值,无更新】
- POJ 3264 Balanced Lineup 求线段树区间最值
- poj 3264 Balanced Lineup(线段树 区间最值)
- POJ 3264 Balanced Lineup 线段树 单点更新 求区间最值
- G - Balanced Lineup POJ 3264 (线段树+区间查询无更新)
- POJ 3264 Balanced Lineup (线段树单点更新 区间查询)
- poj Balanced Lineup (线段树区间最值+优化)
- poj 3264 -- Balanced Lineup (区间最值,线段树/RMQ)
- POJ 3264 Balanced Lineup (区间最值 RMQ模板/线段树)
- POJ 3264 Balanced Lineup //简单线段树
- poj 3264 Balanced Lineup简单线段树
- poj 3264 Balanced Lineup(简单线段树)
- POJ 3264-Balanced Lineup(线段树:单点更新,区间查询)
- POJ3264 Balanced Lineup(线段树,区间最值)
- Balanced Lineup 线段树 rmq 区间最值
- POJ 3264 Balanced Lineup 线段树的构建+区间查询
- POJ 3264-Balanced Lineup详解(线段树区间求值)
- poj 3264 Balanced Lineup线段树区间最值差
- 小程序服务范围大调整!社交、直播都能做
- C语言笔记--代码学习笔记--C语言语法--基本操作运算-basic-logorithm
- Mybatis oracle常用语句
- 线性代数学习笔记(一)
- Butterfly
- POJ 3264 Balanced Lineup【简单线段树,区间最值,无更新】
- android studio使用
- Construct Binary Tree from Inorder and Postorder Traversal
- Selective Search for Object Recognition解读
- Python中几种数据结构的整理,列表、字典、元组、集合
- AngularJS简介
- iOS-报错[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[0]'
- 朴素贝叶斯 VS 逻辑回归 区别
- PAT 乙级 1064. 朋友数(20)