Balanced Lineup
来源:互联网 发布:编程语言薪资排行 编辑:程序博客网 时间:2024/05/29 18:10
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 toorganize a game of Ultimate Frisbee with some of the cows. To keepthings simple, he will take a contiguous range of cows from themilking lineup to play the game. However, for all the cows to havefun they should not differ too much in height.
Farmer John has made a list of Q (1 ≤ Q ≤ 200,000) potentialgroups of cows and their heights (1 ≤ height ≤ 1,000,000). For eachgroup, he wants your help to determine the difference in heightbetween 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 heightof 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 aresponse to a reply and indicates the difference in height betweenthe 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
代码:
#include<stdio.h>#include<math.h>struct node{ int l,r,max,min;};node a[200005];int flag[50005],da,xiao;void creattree(int i,int x,int y) //建树 从小区间递归 得到每个区间的 max和min{ int mid; a[i].l=x; a[i].r=y; if(x==y) { a[i].min=a[i].max=flag[x]; return; } mid=(x+y)/2; creattree(i*2,x,mid); creattree(i*2+1,mid+1,y); if(a[i*2].max>a[(i*2)+1].max)a[i].max=a[i*2].max; else a[i].max=a[(i*2)+1].max; if(a[i*2].min<a[(i*2)+1].min)a[i].min=a[i*2].min; else a[i].min=a[(i*2)+1].min;}void update(int i,int x,int y){ int mid; if(a[i].l==x && a[i].r==y) {// 不断更新 所查找的 区间的 max 和 min 的值 直到所要查找的 区间都已被 查找出来。
if(a[i].max>da)da=a[i].max; if(a[i].min<xiao)xiao=a[i].min; return ; } mid=(a[i].l+a[i].r)/2; if(y<=mid)update(i*2,x,y); else if(x>mid)update(i*2+1,x,y); else { update(i*2,x,mid); update(i*2+1,mid+1,y); }}int main(){ int n,x,y,i,p; while(scanf("%d%d",&n,&p)!=EOF) { for(i=1;i<=n;i++)scanf("%d",&flag[i]); creattree(1,1,n); for(i=0;i<p;i++) { da=0; xiao=1000001; scanf("%d%d",&x,&y); update(1,x,y); printf("%d\n",da-xiao); } } return 0;}
- Balanced Lineup
- POJ 2364 Balanced Lineup
- poj 3274 Gold Balanced Lineup
- 线段树练习Balanced Lineup
- poj 3264 Balanced Lineup(线段树)
- Balanced Lineup
- Balanced Lineup
- Balanced Lineup
- Balanced Lineup
- Balanced Lineup
- Balanced Lineup
- Balanced Lineup
- Balanced Lineup
- PKU3274 Gold Balanced Lineup
- pku 3264Balanced Lineup
- POJ 3264 Balanced Lineup
- PKU3264 balanced lineup
- POJ 3264 Balanced Lineup
- Problem G
- Problem C
- 1073(OnlineJudge)
- Color the ball
- poj 3468 A Simple Problem with I…
- Balanced Lineup
- Just a Hook
- floyd 最短路算法
- hdu 2544 最短路
- hdu 1690 Bus System 最短路 floyd
- hdu3790-----单源最短路径
- 最短路径算法—Bellman-Ford(贝尔曼…
- ZOJ 2864 多条最短路径
- 背包问题九讲(转)