Balanced Lineup
Time Limit: 5000MS   Memory Limit: 65536K
Total Submissions: 34522   Accepted: 16224
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 decides to organize a game of Ultimate Frisbee with some of the cows. To keep things simple, he will take a contiguous range
of cows from the milking lineup to play the game. However, for all the cows to have fun they should not differ too much in height.

Farmer John has made a 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 to determine the difference in height between 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 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 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

Source

经ysj一说我也准备噜线段树了 那天下午他来给我讲了一下线段树。先敲个模板再说。。

题意是找某个区间的最大值和最小值的差值。

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cctype>
#include <cmath>
#include <cstdlib>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <list>
#define LL long long
using namespace std;
const int INF=1<<27;
const int maxn=200010;
LL minn[maxn],maxx[maxn];
void update(LL root,LL l,LL r,LL p,LL v)//单点更新
{
if(l==r) maxx[root]=v;minn[root]=v;
if(l<r)
{
LL mid=(l+r)/2;
if(p<=mid) update(root*2,l,mid,p,v);
else update(root*2+1,mid+1,r,p,v);
maxx[root]=max(maxx[root*2],maxx[root*2+1]);
minn[root]=min(minn[root*2],minn[root*2+1]);
}
}
LL query_min(LL root,LL l,LL r,LL ql,LL qr)
{
LL mid=(l+r)/2,ans=INF;
if(ql<=l&&qr>=r) return minn[root];
if(ql<=mid) ans=min(ans,query_min(root*2,l,mid,ql,qr));
if(qr>mid) ans=min(ans,query_min(root*2+1,mid+1,r,ql,qr));
return ans;
}
LL query_max(LL root,LL l,LL r,LL ql,LL qr)
{
LL mid=(l+r)/2,ans=-INF;
if(ql<=l&&qr>=r) return maxx[root];
if(ql<=mid) ans=max(ans,query_max(root*2,l,mid,ql,qr));
if(qr>mid) ans=max(ans,query_max(root*2+1,mid+1,r,ql,qr));
return ans;
}
int main()
{
int N,Q,i,v;
while(~scanf("%lld%lld",&N,&Q))
{
for(i=1;i<=N;i++)
{
scanf("%lld",&v);
update(1,1,N,i,v);
}
while(Q--)
{
int ql,qr;
scanf("%lld%lld",&ql,&qr);
printf("%lld\n",query_max(1,1,N,ql,qr)-query_min(1,1,N,ql,qr));
}
}
return 0;
}

最新文章

  1. sql复习第四次
  2. 【转】Android选项卡置底的方法
  3. nethogs 实时查看进程使用流量情况。
  4. Oracle 11g新参数USE_LARGE_PAGES与AMM使用 (转载)
  5. POJ 2021 Relative Relatives(map+树的遍历)
  6. 汇编中Enter与Leave指令
  7. 关于word2010中完美解决数学公式(正斜体)输入的解决方案
  8. 常用mimetype
  9. MySQL高效获取记录总数
  10. Hadoop将本地文件复制到Hadoop文件系统
  11. java工程师联通XX面试题目
  12. Catch That Cow_bfs
  13. webpack的常识概念
  14. Mybatis运行错误:信息: SQLErrorCodes loaded: [DB2, Derby, H2, HDB, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase]
  15. C#之代码优化
  16. Yum安装Zabbix4.2.0
  17. codevs 1063 合并果子 STL 优先队列
  18. default.properties文件
  19. c# 依赖注入之---反射(转)
  20. Eclipse注释模板设置

热门文章

  1. 手把手教你修改pcduino系统默认的音频输出
  2. Atitit.jquery 版本号新特性attilax总结
  3. js弹出对话框,遮罩效果,
  4. D2010 RTTI + Attribute 简单实现ORM
  5. SQL中如何将一个表中的某一列的数据复制到另一个表中的某一列里
  6. ZOJ 3529 A Game Between Alice and Bob(博弈论-sg函数)
  7. 使用Boost库中的组件进行C++内存管理
  8. latex表格线的颜色设置(边框添加颜色)
  9. stm32 ARM中的RO、RW和ZI DATA
  10. No-Touch Integration 在SharePoint中使用社区支持的Silverlight应用程序