博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj3264
阅读量:6270 次
发布时间:2019-06-22

本文共 1059 字,大约阅读时间需要 3 分钟。

Description

在每天挤奶的时候,农民约翰的N头牛(1≤n≤50000)总是排成一列。有一天,约翰决定与他的牛们一起玩一个极限飞盘游戏。为了简单起见,他将从奶牛队列里面选一定范围内的奶牛来玩这个游戏。然而所有的牛对这个游戏都很感兴趣。农民约翰列出了Q份名单(1≤Q≤200000)和每个奶牛的高度(1≤高度≤1000000)。对于每一份名单,他想你帮助他确定在每份名单中高度最高的奶牛与高度最低的奶牛的高度差是多少。

Input

第一行为N(1≤N≤50000)和Q(1≤Q≤200000);从第2行到第N+1行,每行一个数字,表示第i头牛的高度(1≤height≤1000000);从第N+2行到第N+Q+1行,每行两个整数A和B(1≤A≤B≤N),表示从第A头牛到第B头牛的范围。

Output

从第一行到第Q行,每行一个整数,表示从第A头牛到第B头牛之间,最高牛与最矮牛的高度差。

Sample Input

6 3
1
7
3
4
2
5
1 5
4 6
2 2

Sample Output

6
3
0

 

裸的RMQ,维护区间最小值和最大值
但是有些细节需要注意。。
1 #include
2 #include
3 #include
4 #include
5 using namespace std; 6 const int MAXN=200001; 7 void read(int & n) 8 { 9 char c='+';int x=0;bool flag=0;10 while(c<'0'||c>'9')11 {c=getchar();if(c=='-')flag=1;}12 while(c>='0'&&c<='9')13 {x=x*10+(c-48);c=getchar();}14 flag==1?n=-x:n=x;15 }16 int n,m;17 int a[MAXN],maxrmq[MAXN][51],minrmq[MAXN][51];18 int qmax(int l,int r)19 {20 int k=0;21 while(l+(1<<(k+1))<=r+1)22 k++;23 return max(maxrmq[l][k],maxrmq[r-(1<

 

转载地址:http://foppa.baihongyu.com/

你可能感兴趣的文章
如何取消未知类型文件默认用记事本打开
查看>>
[Javascript] Immute Object
查看>>
Java 关于finally、static
查看>>
Posix mq和SystemV mq区别
查看>>
P6 EPPM Manual Installation Guide (Oracle Database)
查看>>
XMPP协议、IM、客户端互联详解
查看>>
PHP写文件函数
查看>>
mysql的sql_mode合理设置
查看>>
函数连续性与可导性
查看>>
linux下libevent安装
查看>>
用ip来获得用户所在地区信息
查看>>
卡尔曼滤波
查看>>
linux下面覆盖文件,如何实现直接覆盖,不提示
查看>>
CSS3阴影 box-shadow的使用和技巧总结
查看>>
Linux下高cpu解决方案
查看>>
SQL事务用法begin tran,commit tran和rollback tran的用法
查看>>
centos7 crontab笔记
查看>>
.Net AppDomain.CurrentDomain.AppendPrivatePath(@"Libs");
查看>>
【Unity3D基础教程】给初学者看的Unity教程(零):如何学习Unity3D
查看>>
Android Mina框架的学习笔记
查看>>