Description

每天,农夫 John 的N(1 <= N <= 50,000)头牛总是按同一序列排队. 有一天, John 决定让一些牛们玩一场飞盘比赛. 他准备找一群在对列中为置连续的牛来进行比赛. 但是为了避免水平悬殊,牛的身高不应该相差太大. John 准备了Q (1 <= Q <= 180,000) 个可能的牛的选择和所有牛的身高 (1 <= 身高 <= 1,000,000). 他想知道每一组里面最高和最低的牛的身高差别. 注意: 在最大数据上, 输入和输出将占用大部分运行时间.

Input

* 第一行: N 和 Q. * 第2..N+1行: 第i+1行是第i头牛的身高.

* 第N+2..N+Q+1行: 两个整数, A 和 B (1 <= A <= B <= N), 表示从A到B的所有牛.

Output

*第1..Q行: 所有询问的回答 (最高和最低的牛的身高差), 每行一个.

Sample Input

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

Sample Output

6
3
0

第一次敲了个RMQ……因为位运算优先级太低没加括号而一直RE……

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
using namespace std;
long long f[100001][30];
long long g[100001][30];
long long a[100001];
inline int read()
{int x=0;char ch=getchar();while(ch<'0'||ch>'9')ch=getchar();while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x;
}
int main()
{
memset(f,-1,sizeof(f));
memset(g,127/3,sizeof(g));
int n=read(),q=read();
for (int i=1;i<=n;i++)a[i]=read();
for (int i=1;i<=n;i++)
{
f[i][0]=a[i];
g[i][0]=a[i];
}
for (int j=1;j<=log((double)n)/log(2.0);j++)
{for (int i=1;i<=n+1-(1<<j);i++)
{f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);g[i][j]=min(g[i][j-1],g[i+(1<<(j-1))][j-1]);
}
}
for (int i=1;i<=q;i++){int x=read(),y=read();int k=log(y-x+1)/log(2);
int mx=max(f[x][k],f[y+1-(1<<k)][k]);int mn=min(g[x][k],g[y+1-(1<<k)][k]);printf("%d\n",mx-mn);}
}

转载于:https://www.cnblogs.com/zhber/p/4036095.html

bzoj1699[Usaco2007 Jan]Balanced Lineup排队相关推荐

  1. bzoj 1636 bzoj 1699: [Usaco2007 Jan]Balanced Lineup排队(RMQ)

    1699: [Usaco2007 Jan]Balanced Lineup排队 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1514  Solved:  ...

  2. bzoj 1699: [Usaco2007 Jan]Balanced Lineup排队【st表||线段树】

    要求区间取min和max,可以用st表或线段树维护 st表 #include<iostream> #include<cstdio> using namespace std; c ...

  3. [BZOJ] 1637: [Usaco2007 Mar]Balanced Lineup

    1637: [Usaco2007 Mar]Balanced Lineup Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 697  Solved: 463 ...

  4. bzoj 1637: [Usaco2007 Mar]Balanced Lineup

    1637: [Usaco2007 Mar]Balanced Lineup Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 689  Solved: 456 ...

  5. 【差分+前缀和】BZOJ1637: [Usaco2007 Mar]Balanced Lineup

    Description Farmer John 决定给他的奶牛们照一张合影,他让 N (1 ≤ N ≤ 50,000) 头奶牛站成一条直线,每头牛都有它的坐标(范围: 0..1,000,000,000 ...

  6. bzoj 1637: [Usaco2007 Mar]Balanced Lineup【瞎搞】

    我是怎么想出来的-- 把种族为0的都变成-1,按位置x排升序之后,s[i]表示种族前缀和,想要取(l,r)的话就要\( s[r]-s[l-1]==0 s[r]==s[l-1] \),用一个map存每个 ...

  7. 1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列

    1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 510   ...

  8. bzoj 1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列

    1702: [Usaco2007 Mar]Gold Balanced Lineup 平衡的队列 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 821   ...

  9. poj3264 - Balanced Lineup(RMQ_ST)

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 45243   Accepted: 21240 ...

最新文章

  1. Cesar竞赛平台项目中期总结
  2. 【算法设计】虎溪校园导游系统
  3. optee内核中malloc函数的原理介绍
  4. 列表推导式与生成表达式的区别
  5. 错误ORA-04091: table is mutating, trigger/function may not see it的原因以及解决办法
  6. 安卓mysql插入数据_【11-25求助】关于Android 的SQLite数据库插入数据报错问题
  7. python数组的使用
  8. linux下iptables的编译及简单使用
  9. 对网易云音乐软件的看法
  10. 我 yii2 (一)
  11. html 5 本地数据库(二)-- Web Sql Database核心方法openDatabase、transaction、executeSql 详解
  12. landsat 8 卫星 波段介绍 及组合
  13. Oracle 索引原理和种类
  14. 2021-05-13 Redis面试题 MySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据?
  15. 表格序号_Word办公技巧:如何为文档中的表格添加居中对齐的自动序号?
  16. 用c/c++和Java语言实现庞加莱回归
  17. PPT技巧分享,教你制作美美的PPT图表
  18. 模电学习心得(转载)_史蒂文森sun_新浪博客
  19. 13 个 Mongodb GUI 可视化管理工具,总有一款适合你
  20. 开关电源PCB走线的时候需要注意什么?

热门文章

  1. javascript动态创建radio button元素支持IE/Firefox
  2. java 7 update 17_Java version 7, Update 17 is NOT recongnized by FireFox version 19.0.2
  3. spss方差分析_【案例】SPSS统计分析:多因素方差分析
  4. PyOpenCV 基本操作
  5. 使用VS2012内建的C++测试架构进行单元测试
  6. RHEL(Red Hat Enterprise Linux)配置YUM源
  7. C语言sendto()函数:经socket传送数据
  8. 1w存银行一年多少利息_100万存银行一年利息多少?能赚多少钱?
  9. 大整数乘法c语言代码_大整数乘法
  10. 上海交大计算机学院奖学金,上海交通大学-电子信息与电气工程学院-学生工作办公室...