• poj 3264


    Balanced Lineup

    Time Limit: 5000MS

     

    Memory Limit: 65536K

    Total Submissions: 44506

     

    Accepted: 20902

    Case Time Limit: 2000MS

    Description

    For the dailymilking, Farmer John's N cows (1 ≤ N ≤ 50,000)always line up in the same order. One day Farmer John decides to organize agame of Ultimate Frisbee with some of the cows. To keep things simple, he willtake a contiguous(连续的) range of cows from the milking lineup(阵容) to play the game. However, for all the cowsto have fun they should not differ too much in height.

    Farmer John has madea 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 todetermine the difference in height between the shortest and the tallest cow inthe group.

    Input

    Line 1:Two space-separated integers(整数), N and Q
    Lines 2..N+1: Line i+1contains 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 tallestand shortest cow in the range.

    SampleInput

    6 3

    1

    7

    3

    4

    2

    5

    1 5

    4 6

    2 2

    SampleOutput

    6

    3

    0

    Source

    USACO2007 January Silver

    线段树解法

    Problem: 3264

    User: ksq2013

    Memory: 1692K

    Time: 3891MS

    Language: G++

    Result: Accepted

     

    #include<cstdio>
    #include<cstdlib>
    #include<iostream>
    using namespace std;
    int n,q,_max[200001],_min[200001];
    void update(int s,int t,int k,int add,int p)
    {
    	if(!(s^t)){
    		_max[k]=_min[k]=p;
    		return;
    	}int m=(s+t)>>1;
    	if(add<=m)update(s,m,k<<1,add,p);
    	else update(m+1,t,k<<1|1,add,p);
    	_max[k]=max(_max[k<<1],_max[k<<1|1]);
    	_min[k]=min(_min[k<<1],_min[k<<1|1]);
    }
    int query1(int s,int t,int k,int l,int r)
    {
    	if(l<=s&&t<=r)return _max[k];
    	int m=(s+t)>>1,res1=0,res2=0;
    	if(l<=m)res1=query1(s,m,k<<1,l,r);
    	if(m<r)res2=query1(m+1,t,k<<1|1,l,r);
    	return max(res1,res2);
    }
    int query2(int s,int t,int k,int l,int r)
    {
    	if(l<=s&&t<=r)return _min[k];
    	int m=(s+t)>>1,res1=0x7fffffff,res2=0x7fffffff;
    	if(l<=m)res1=query2(s,m,k<<1,l,r);
    	if(m<r)res2=query2(m+1,t,k<<1|1,l,r);
    	return min(res1,res2);
    }
    int main()
    {
    	scanf("%d%d",&n,&q);
    	for(int i=1;i<=n;i++){
    		int x;
    		scanf("%d",&x);
    		update(1,n,1,i,x);
    	}
    	for(int i=1;i<=q;i++){
    		int a,b;
    		scanf("%d%d",&a,&b);
    		printf("%d
    ",query1(1,n,1,a,b)-query2(1,n,1,a,b));
    	}
    	return 0;
    }



  • 相关阅读:
    单档作业(带明细档)——项次自动自增
    单档——PK单号新增、修改时不允许编辑,PK单号自动生成
    单档——控件关联查询
    报表查询——自动刷新数据,双击明细打开关联作业
    asp.net练习②——Paginaton无刷新分页
    strcpy 用法
    2008年“超搞”语录
    IT职场里的某些人感悟(欢迎各抒己见)
    SQL2005无法正常登录
    经典短文
  • 原文地址:https://www.cnblogs.com/keshuqi/p/5957792.html
Copyright © 2020-2023  润新知