POJ 3264 - Balanced Lineup(线段树)
来源:互联网 发布:闪烁特效的软件 编辑:程序博客网 时间:2024/06/10 18:09
Balanced Lineup
Time Limit: 5000MS Memory Limit: 65536KTotal Submissions: 29686 Accepted: 14001Case Time Limit: 2000MS
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
Line 1: Two space-separated integers, N and Q.
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.
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
Lines 1..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 31734251 54 62 2
Sample Output
630
===========================
#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>#define N 222222using namespace std;int num[N],MAX,MIN;struct Tree{ int l; int r; int max; int min;} tree[N*4];void push_up(int root){ tree[root].max=max(tree[root<<1].max,tree[root<<1|1].max); tree[root].min=min(tree[root<<1].min,tree[root<<1|1].min);}void build(int root,int l,int r){ tree[root].l=l; tree[root].r=r; if(tree[root].l==tree[root].r) { tree[root].max=num[l]; tree[root].min=num[l]; return; } int mid=(l+r)/2; build(root<<1,l,mid); build(root<<1|1,mid+1,r); push_up(root);}void update(int root,int pos,int val){ if(tree[root].l==tree[root].r) { tree[root].max=val; tree[root].min=val; return; } int mid=(tree[root].l+ tree[root].r)/2; if(pos<=mid) update(root<<1,pos,val); else update(root<<1|1,pos,val); push_up(root);}void query(int root,int L,int R,Tree tree[]){ if(L<=tree[root].l&&R>=tree[root].r) { MIN=min(MIN,tree[root].min); MAX=max(MAX,tree[root].max); return; } int mid=(tree[root].l+tree[root].r)/2; if(L<=mid) query(root<<1,L,R,tree); if(R>mid) query(root<<1|1,L,R,tree);}int main(){ int n,q,a,b; scanf("%d%d",&n,&q); for(int i=1;i<=n;i++) { scanf("%d",&num[i]); } build(1,1,n); for(int i=0;i<q;i++) { scanf("%d%d",&a,&b); MAX=-1;MIN=1e9; query(1,a,b,tree); printf("%d\n",MAX-MIN); } return 0;}
- POJ 3264 - Balanced Lineup(线段树)
- Balanced Lineup(POJ-3264)(线段树)
- POJ - 3264 - Balanced Lineup (线段树)
- poj 3264 Balanced Lineup(线段树)
- POJ 3264Balanced Lineup(线段树)
- poj 3264 Balanced Lineup(线段树)
- POJ 3264Balanced 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 基础线段树
- poj 3264 Balanced Lineup(线段树)
- POJ 3264 Balanced Lineup 线段树
- Poj 3264 Balanced Lineup - 线段树
- POJ 3264 Balanced Lineup (RMQ线段树)
- POJ 3264 Balanced Lineup 线段树RMQ
- java 对类中的属性使用set/get方法的作用
- 容器
- 浅谈编程解决实际问题的常见思想
- 单向晶闸管
- trainging contest#2(2011成都现场赛)A BY bly
- POJ 3264 - Balanced Lineup(线段树)
- UML中的四种关系
- counting sort和radix sort
- Ubuntu如何清理系统垃圾
- 世界上最神奇的数字:142857,看似平凡的数字,为什么说他最神奇呢?——The world's most amazing number: 142857
- Hibernate征途(五)之继承映射和组件映射
- 员工满意度调查问卷
- POJ 3026 - Borg Maze(最小树+BFS)
- 基于Flex的实时H.264流转发平台之流转发服务端(Red5)