【bzoj1067】[SCOI2007]降雨量 倍增RMQ
题目描述
我们常常会说这样的话:“X年是自Y年以来降雨量最多的”。它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小于X年。例如2002,2003,2004和2005年的降雨量分别为4920,5901,2832和3890,则可以说“2005年是自2003年以来最多的”,但不能说“2005年是自2002年以来最多的”由于有些年份的降雨量未知,有的说法是可能正确也可以不正确的。
输入
输入仅一行包含一个正整数n,为已知的数据。以下n行每行两个整数yi和ri,为年份和降雨量,按照年份从小到大排列,即yi<yi+1。下一行包含一个正整数m,为询问的次数。以下m行每行包含两个数Y和X,即询问“X年是自Y年以来降雨量最多的。”这句话是必真、必假还是“有可能”。
输出
对于每一个询问,输出true,false或者maybe。
样例输入
6
2002 4920
2003 5901
2004 2832
2005 3890
2007 5609
2008 3024
5
2002 2005
2003 2005
2002 2007
2003 2007
2005 2008
样例输出
false
true
false
maybe
false
题解
倍增RMQ
分类讨论:
- 如果 $l$ 和 $r$ 都未知:显然答案为maybe。
- 如果 $l$ 未知而 $r$ 已知:如果 $[l+1,r-1]$ 中有大于等于 $r$ 的则答案为false;否则为maybe。
- 如果 $l$ 已知而 $r$ 未知:如果 $[l+1,r-1]$ 中有大于等于 $l$ 的则答案为false;否则为maybe。
- 如果 $l$ 和 $r$ 都已知:如果 $r$ 比 $l$ 大,或者 $[l+1,r-1]$ 中有大于等于 $r$ 的则答案为false;否则如果 $[l+1,r-1]$ 均给出则答案为true;否则为maybe。
具体使用二分查找寻找到在给出序列中的位置以及判断是否均给出,使用倍增RMQ求区间最大值。
时间复杂度 $O(n\log n)$ 。
#include <cstdio>
#include <algorithm>
#define N 50010
using namespace std;
int n , a[N] , v[N] , mx[N][17] , log[N];
inline int is_full(int l , int r)
{
int x = lower_bound(a + 1 , a + n + 1 , l) - a , y = upper_bound(a + 1 , a + n + 1 , r) - a - 1;
return r - l == y - x;
}
inline int query(int l , int r)
{
int x = lower_bound(a + 1 , a + n + 1 , l) - a , y = upper_bound(a + 1 , a + n + 1 , r) - a - 1 , k;
if(x > y) return 0;
k = log[y - x + 1];
return max(mx[x][k] , mx[y - (1 << k) + 1][k]);
}
int main()
{
int m , i , j , l , r , tl , tr , tm;
scanf("%d" , &n);
for(i = 1 ; i <= n ; i ++ ) scanf("%d%d" , &a[i] , &v[i]) , mx[i][0] = v[i];
for(i = 2 ; i <= n ; i ++ ) log[i] = log[i >> 1] + 1;
for(i = 1 ; i <= log[n] ; i ++ )
for(j = 1 ; j <= n - (1 << i) + 1 ; j ++ )
mx[j][i] = max(mx[j][i - 1] , mx[j + (1 << (i - 1))][i - 1]);
scanf("%d" , &m);
while(m -- )
{
scanf("%d%d" , &l , &r);
tl = query(l , l) , tr = query(r , r);
tm = query(l + 1 , r - 1);
if(!tl && !tr) puts("maybe");
else if(!tl)
{
if(tm >= tr) puts("false");
else puts("maybe");
}
else if(!tr)
{
if(tm >= tl) puts("false");
else puts("maybe");
}
else
{
if(tl < tr || tm >= tr) puts("false");
else if(is_full(l + 1 , r - 1)) puts("true");
else puts("maybe");
}
}
return 0;
}
【bzoj1067】[SCOI2007]降雨量 倍增RMQ的更多相关文章
- [BZOJ1067][SCOI2007]降雨量
[BZOJ1067][SCOI2007]降雨量 试题描述 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意 Y<Z<X,Z年的降雨量严格 ...
- BZOJ1067 [SCOI2007]降雨量 RMQ???
求救!!!神犇帮我瞅瞅呗...未完...调了2个半小时线段树,没调出来,大家帮帮我啊!!! 小詹用st表写. 我的思路就是把中间空着的年份设为无限,然后一点点特判就行了...然而没出来... [SCO ...
- 【线段树 细节题】bzoj1067: [SCOI2007]降雨量
主要还是细节分析:线段树作为工具 Description 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小 ...
- 【BZOJ1067】[SCOI2007] 降雨量(RMQ+分类讨论)
点此看题面 大致题意:请你判断"\(x\)年是自\(y\)年以来降雨量最多的"这句话的真假. 离散化/\(lower\_bound\) 首先,考虑到年份的范围非常大,便可以离散化. ...
- 【BZOJ】1067: [SCOI2007]降雨量(rmq+变态题)
http://www.lydsy.com/JudgeOnline/problem.php?id=1067 好不爽,弄了一个晚上. 好不爽. 还是照着别人程序拍着看的!!! 噗 这题很变态. 首先,我没 ...
- BZOJ1067 [SCOI2007]降雨量 线段树
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1067 题意概括 给定n组整数对(Xi,Yi),当Xi<Xj且Yi>=Yj时,如果对于任 ...
- BZOJ 1067:[SCOI2007]降雨量(RMQ+思维)
http://www.lydsy.com/JudgeOnline/problem.php?id=1067 题意:…… 思路:首先我们开一个数组记录年份,一个记录降雨量,因为年份是按升序排列的,所以我们 ...
- bzoj1067——SCOI2007降雨量(线段树,细节题)
题目描述 我们常常会说这样的话:"X年是自Y年以来降雨量最多的".它的含义是X年的降雨量不超过Y年,且对于任意\(Y<Z<X\),Z年的降雨量严格小于X年.例如2002 ...
- [bzoj1067][SCOI2007]降雨量——线段树+乱搞
题目大意 传送门 题解 我国古代有一句俗话. 骗分出奇迹,乱搞最神奇! 这句话在这道题上得到了鲜明的体现. 我的方法就是魔改版线段树,乱搞搞一下,首先借鉴了黄学长的建树方法,直接用一个节点维护年份的区 ...
随机推荐
- 20155334 2016-2017-2 《Java程序设计》第十周学习总结
20155334 2016-2017-2 <Java程序设计>第十周学习总结 教材学习内容总结 1.计算机网络概述 (1)路由器和交换机组成了核心的计算机网络,计算机只是这个网络上的节点以 ...
- 20155338 2006-2007-2 《Java程序设计》第2周学习总结
20155338 2006-2007-2 <Java程序设计>第2周学习总结 教材学习内容总结 本周学习了教材的第三章内容,大体上都较好理解,有很多内容基本上都跟C语言的知识类似,学习的内 ...
- python--自定义模块
python模块说明:类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不 ...
- 二、Django快速安装
一.安装Python 作为一个Python Web框架,Django依赖Python.从Django适用于哪些版本的Python可以获取更多信息.较新版本的Python内置一个轻量级的数据库SQLit ...
- C#入门经典第十章例题 - - 卡牌
1.库 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ...
- 【PMP考试专栏】01、五大过程组和十大知识领域
- nordic-mesh中应用的代码实现
nordic-mesh中应用的代码实现 Nordic-Mesh遵循SIG-Mesh-Profile中的mesh定义,实现了element.model等概念. 一个应用中包含一个或多个element,e ...
- 阿里与ShopRunner达成协议 联手在国内推出服务
阿里巴巴集团与美国在线零售商 ShopRunner 达成协议,将帮助后者在中国大陆销售商品和履行订单交付产品. ShopRunner 首席战略官菲奥娜·迪亚斯(Fiona Dias)周三接受媒体采访时 ...
- HTML5+Bootstrap 学习笔记 4
HTML5 <map> <area> 标签 <map> 标签定义客户端的图像映射.图像映射是带有可点击区域的图像. <area> 标签定义图像映射内部的 ...
- 直接抱过来dd大牛的《背包九讲》来做笔记
P01: 01背包问题 题目 有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大. 基本思路 这是最 ...