题目传送门

降雨量

题目背景

07四川省选

题目描述

我们常常会说这样的话:“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。

输入输出样例

输入样例#1:

6
2002 4920
2003 5901
2004 2832
2005 3890
2007 5609
2008 3024
5
2002 2005
2003 2005
2002 2007
2003 2007
2005 2008
输出样例#1:

false
true
false
maybe
false

说明

100%的数据满足:1<=n<=50000, 1<=m<=10000, $-10^9\leq yi\leq 10^9$,$1\leq ri\leq 10^9$


  分析:

  一道细节贼多的$RMQ$问题。

  因为年份太多,所以不能直接用年份作下标,需要离散化。每次询问给定左端点和右端点后,找出第一个不小于它们的年份,也就确定了下标,令它们为$sta,ed$。那么在区间$(sta,ed)$中找到最大的降雨量,与边界进行判断得到结果。当然,如果左端点并没有在输入的年份中,就应该要在区间$[sta,ed)$中找最大的降雨量判断。判断的情况如下:

  $false$:

  右端点与左端点都已经在输入中给出且右端点的降雨量大于左端点降雨量;

  右端点的年份已经在输入中给出且在区间中找到的最大值大于等于右端点降雨量;

  左端点的年份已经在输入中给出且在区间中找到的最大值大于等于左端点降雨量;

  $maybe$:

  左端点或右端点没有在输入数据中给出;

  左右端点的下标之差小于左右端点的年份之差;

  $true$:

  除了以上情况。

  只要注意好所有的细节,考虑到所有的情况,这题也就不难想了。

  Code:

  

//It is made by HolseLee on 4th Sep 2018
//Luogu.org P2471
#include<bits/stdc++.h>
using namespace std; const int N=5e4+;
int n,m,ye[N],ra[N]; namespace Segment {
int seg[N<<]; inline void pushup(int rt)
{
seg[rt]=max(seg[rt<<],seg[rt<<|]);
} void build(int l,int r,int rt)
{
if( l>r )return;
if( l==r ) {
seg[rt]=ra[l]; return;
}
int mid=(l+r)>>;
build(l,mid,rt<<); build(mid+,r,rt<<|);
pushup(rt);
} int quary(int l,int r,int rt,int L,int R)
{
int ret=;
if( l>R || r<L ) return ret;
if( L<=l && r<=R ) return seg[rt];
int mid=(l+r)>>;
if( L<=mid ) ret=max(ret,quary(l,mid,rt<<,L,R));
if( R>mid ) ret=max(ret,quary(mid+,r,rt<<|,L,R));
return ret;
}
} inline int read()
{
char ch=getchar(); int num=; bool flag=false;
while( ch<'' || ch>'' ) {
if( ch=='-' ) flag=true;
ch=getchar();
}
while( ch>='' && ch<='' ) {
num=(num<<)+(num<<)+(ch^);
ch=getchar();
}
return flag ? -num : num;
} int main()
{
n=read();
for(int i=; i<=n; ++i) {
ye[i]=read(), ra[i]=read();
}
Segment::build(,n,);
m=read();
int x,y,sta,ed,ka; bool fl,fr;
for(int i=; i<=m; ++i) {
x=read(); y=read();
if( x>=y ) {
printf("false\n"); continue;
}
sta=lower_bound(ye+,ye+n+,x)-ye;
ed=lower_bound(ye+,ye+n+,y)-ye;
fl=ye[sta]==x, fr=ye[ed]==y; ka=;
if( !fl ) sta--;
if( sta+<=ed-) ka=Segment::quary(,n,,sta+,ed-);
if( (ka>=ra[sta] && fl) || (ka>=ra[ed] && fr) || (ra[ed]>ra[sta] && fl && fr) ) printf("false\n");
else if( ed-sta!=ye[ed]-ye[sta] || !fl || !fr ) printf("maybe\n");
else printf("true\n");
}
}

洛谷P2471 [SCOI2007] 降雨量 [RMQ,模拟]的更多相关文章

  1. 洛谷P2471——[SCOI2007]降雨量

    本机AC提交RE…… 传送门:QAQQAQ 题意:自己看 思路:据说这道题用RMQ做很快,但这道题线段树是可以的 线段树维护一段区间最左年,最右年,是否有间隙和区间最大值 这道题分类讨论是一大难点,主 ...

  2. 洛谷 P5594 【XR-4】模拟赛

    洛谷 P5594 [XR-4]模拟赛 洛谷传送门 题目描述 X 校正在进行 CSP 前的校内集训. 一共有 nn 名 OIer 参与这次集训,教练为他们精心准备了 mm 套模拟赛题. 然而,每名 OI ...

  3. 洛谷P3434 [POI2006]KRA-The Disks [模拟]

    题目传送门 KRA 题目描述 For his birthday present little Johnny has received from his parents a new plaything ...

  4. 【题解】洛谷P3952 [NOIP2017TG] 时间复杂度(模拟)

    题目来源:洛谷P3952 思路 纯模拟没啥可说的了 果然好复杂 参考了你谷一个40行代码 代码 #include<iostream> #include<cstdio> #inc ...

  5. 【BZOJ1067】[SCOI2007]降雨量 RMQ+特判

    [BZOJ1067][SCOI2007]降雨量 Description 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年 ...

  6. BZOJ1067 [SCOI2007]降雨量 RMQ???

    求救!!!神犇帮我瞅瞅呗...未完...调了2个半小时线段树,没调出来,大家帮帮我啊!!! 小詹用st表写. 我的思路就是把中间空着的年份设为无限,然后一点点特判就行了...然而没出来... [SCO ...

  7. 洛谷P1039 侦探推理(模拟)

    侦探推理 题目描述 明明同学最近迷上了侦探漫画<柯南>并沉醉于推理游戏之中,于是他召集了一群同学玩推理游戏.游戏的内容是这样的,明明的同学们先商量好由其中的一个人充当罪犯(在明明不知情的情 ...

  8. 洛谷P1086 花生采摘【模拟】

    题目描述 鲁宾逊先生有一只宠物猴,名叫多多.这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!――熊字”. 鲁宾逊先生和多多都很开心,因为花生正是他 ...

  9. P2471 [SCOI2007]降雨量

    Description 我们常常会说这样的话:"X年是自Y年以来降雨量最多的".它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小于X年.例如2 ...

随机推荐

  1. 响应式布局(Responsive Layout)/流式布局(Fluid Layout)/自适应布局(Adaptive)

    1.使用媒体查询来适应不同视口的固定宽度设计,例如bootstrap的container类. 2.将固定像素布局转换成灵活的百分比布局,才能让页面元素根据视口大小在一个又一个媒体查询间伸缩修正样式. ...

  2. 【CodeForces】913 E. Logical Expression

    [题目]E. Logical Expression [题意]令x=11110000(2),y=11001100(2),z=10101010(2),n次询问,每次要求用[与][或][非][括号]构成含至 ...

  3. 读书笔记 ~ Python黑帽子 黑客与渗透测试编程之道

    Python黑帽子  黑客与渗透测试编程之道   <<< 持续更新中>>> 第一章: 设置python 环境 1.python软件包管理工具安装 root@star ...

  4. html 中的列表

    html 中列表可以分为 1.  无序列表(ul--li 的形式) 2.  有序列表(ol li的形式) 3.  定义列表(dl 的形式) 下面来看几种列表的具体内容: 1.无序列表. 无序列表的格式 ...

  5. nth-child,nth-last-child,only-child,nth-of-type,nth-last-of-type,only-of-type,first-of-type,last-of-type,first-child,last-child伪类区别和用法

    我将这坨伪类分成三组,第一组:nth-child,nth-last-child,only-child第二组:nth-of-type,nth-last-of-type,第三组:first-of-tpye ...

  6. F - Warm up HDU - 4612 tarjan缩点 + 树的直径 + 对tajan的再次理解

    题目链接:https://vjudge.net/contest/67418#problem/F 题目大意:给你一个图,让你加一条边,使得原图中的桥尽可能的小.(谢谢梁学长的帮忙) 我对重边,tarja ...

  7. linux配置samba服务【原创】

    转载请注明出处http://www.cnblogs.com/paul8339/p/7509981.html 需求,windows服务器访问linux的共享文件,需要linux服务器安装并配置samba ...

  8. 未找到与约束 ContractName Microsoft.VisualStudio.Utilitues.IContentTypeRegistryService......

    1.问题提出 用VS 2013 with Update5 开发项目,点击项目中的文件,发现打不开,抛出如下的错误. 错误提示: 未找到与约束 ContractName Microsoft.Visual ...

  9. untiy3d学习笔记

    Unity3d 记录 1.63讲 主要讲了menicam 从3D软件里面导出过后,注意如果是人物模型命名一定要非常清晰并且对称.选择到模型后等到到humanoid后可以使用menicam.然后使用me ...

  10. Crypt加密函数简介(C语言)

    定义函数 char * crypt (const char *key,const char * salt); 函数说明 crypt是个密码加密函数,它是基于Data Encryption Standa ...