G - Balanced Lineup - poj3264(区间查询)

题意:给你一组值,然后询问某个区间的最大值和最小值得差

分析:因为没有更新,所以只需要查找即可,节点保存一个最大值最小值就行了

******************************************************************

#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define Lson root<<1,L,tree[root].Mid()
#define Rson root<<1|1,tree[root].Mid()+1,R

const int maxn = 50005;
const int oo = 0xfffffff;

struct Tree
{
    int L, R, MaxH, MinH;
    int Mid(){return (L+R)/2;}
}tree[maxn*4];
int High[maxn], Max, Min;

void Build(int root, int L, int R)
{
    tree[root].L = L, tree[root].R = R;

if(L == R)
    {
        tree[root].MaxH = tree[root].MinH = High[L];
        return ;
    }

Build(Lson);
    Build(Rson);

tree[root].MaxH = max(tree[root<<1].MaxH, tree[root<<1|1].MaxH);
    tree[root].MinH = min(tree[root<<1].MinH, tree[root<<1|1].MinH);
}
void Query(int root, int L, int R)
{
    if(tree[root].L == L && tree[root].R == R)
    {
        Max = max(tree[root].MaxH, Max);
        Min = min(tree[root].MinH, Min);

return ;
    }

if(R <= tree[root].Mid())
        Query(root<<1, L, R);
    else if(L > tree[root].Mid())
        Query(root<<1|1, L, R);
    else
    {
        Query(Lson);
        Query(Rson);
    }
}

int main()
{
    int N, M;

while(scanf("%d%d", &N, &M) != EOF)
    {
        int i, l, r;

for(i=1; i<=N; i++)
            scanf("%d", &High[i]);
        Build(1, 1, N);

while(M--)
        {
            Max = -oo, Min = oo;
            scanf("%d%d", &l, &r);
            Query(1, l, r);

printf("%d\n", Max-Min);
        }
    }

return 0;

}

时间: 2024-10-08 09:46:21

G - Balanced Lineup - poj3264(区间查询)的相关文章

G - Balanced Lineup POJ 3264 (线段树+区间查询无更新)

G - Balanced Lineup Time Limit:5000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Status Practice POJ 3264 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 de

G - Balanced Lineup

G - Balanced Lineup POJ - 3264 思路:水题,线段树的基本操作即可. #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define MAXN 50010 using namespace std; int n,q; struct nond{ int l,r,min,max; }tree[MAXN*4]; void up(int no

Balanced Lineup -POJ3264

题意: 告诉你n头奶牛的高度,然后给你一个区间,你需要求出这个区间最高的奶牛与最矮的奶牛之间相差多少 链接:http://poj.org/problem?id=3264 思路: 线段树区间查询,用两个查询函数,一个查最大值,另一个查最小值,将他们相减即可. 代码: #include <iostream> #include <algorithm> #include <cmath> #include <cstdio> #include <cstdlib&g

Balanced Lineup(POJ-3264)(线段树)

很基础的一道线段树的题,有个地方卡了我好久,我下面的这个代码所求的区间是左闭右开的,所以如果所求区间包括区间端点的话需要在右区间上+1 线段树是一种高效的数据结构,特点是求一个区间里的最小.最大值.      数据结构感觉像模板,但是其中的思想应该更值得我们学习,不过话说现在也没几个人能静下心去研究它的原理了吧.. #include<cstdio> #include<cstring> #include<iostream> #include<algorithm>

poj3264 Balanced Lineup(求区间的最大值与最小值之差)

Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 37869   Accepted: 17751 Case 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 Joh

POJ3264 Balanced Lineup RMQ 线段树

求区间内最大数和最小数的差,用两棵线段树,一个维护区间最大值,一个维护区间最小值. #include <stdio.h> #include <vector> #include <math.h> #include <string.h> #include <string> #include <iostream> #include <queue> #include <list> #include <algori

POJ 3264 Balanced Lineup (线段树单点更新 区间查询)

Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 36820   Accepted: 17244 Case 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 Joh

POJ3264——Balanced Lineup(线段树)

本文出自:http://blog.csdn.net/svitter 题意:在1~200,000个数中,取一段区间,然后在区间中找出最大的数和最小的数字,求这两个数字的差. 分析:按区间取值,很明显使用的线段树.区间大小取200000 * 4 = 8 * 10 ^5; 进行查询的时候,注意直接判断l, r 与mid的关系即可,一开始写的时候直接与tree[root].L判断,多余了, 逻辑不正确. #include <iostream> #include <stdio.h> #inc

POJ3264 Balanced Lineup 线段树 RMQ ST算法应用

Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 36813 Accepted: 17237 Case 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 de