zoukankan      html  css  js  c++  java
  • 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;
    }



  • 相关阅读:
    I.MX6 fbset 使用
    I.MX6 Android 设备节点权限
    使用Android Studio自带的NDK编译JNI
    I.MX6 网卡能收不能发
    make: *** No rule to make target `out/target/common/obj/APPS/framework-res_intermediates/src/R.stamp'
    Linux 监视文件、文件夹改动
    如何定位web前后台的BUG
    <转>SQL语句大全
    软件测试基础理论(三)
    软件测试基础理论(二)
  • 原文地址:https://www.cnblogs.com/keshuqi/p/5957792.html
Copyright © 2011-2022 走看看