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;
    }



  • 相关阅读:
    ICC_lab总结——ICC_lab1:数据设置和基本流程
    数字集成电路物理设计学习总结——时钟树综合
    数字集成电路物理设计学习总结——布图规划和布局
    Sublime Text 最佳插件列表
    Eclipse中10个最有用的快捷键组合
    MyEclipse使用总结——修改MyEclipse默认的Servlet和jsp代码模板
    XML回顾
    Day05_JAVAEE系列:XML
    Day05_JAVAEE系列:Junit
    Git命令
  • 原文地址:https://www.cnblogs.com/keshuqi/p/5957792.html
Copyright © 2011-2022 走看看