题目传送门

降雨量

题目背景

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. libiconv的注意项

    编译后有用的头文件zlib.h和zconf.h,使用时#include "zlib.h". 其中有三个核心的函数: iconv_ticonv_open(constchar*toco ...

  2. Idea工具常用技巧总结

    转自:https://www.jianshu.com/p/131c2deb3ecf Idea常用技巧总结 1.无处不在的跳转 注:这里的快捷键是自己定义的,并非大家的都一样,可以通过findActio ...

  3. Spark RDD——combineByKey

    为什么单独讲解combineByKey? 因为combineByKey是Spark中一个比较核心的高级函数,其他一些高阶键值对函数底层都是用它实现的.诸如 groupByKey,reduceByKey ...

  4. 《JavaScript 实战》:JavaScript 实现图片切割效果

    很久之前就在一个网站的截取相片的功能中看到这个效果,也叫图片裁剪.图片剪切(设置一下也可以做出放大镜等类似的效果).当时觉得很神奇,碍于水平有限,没做出来.前些日子突然想做一个透镜效果,就突然想到了这 ...

  5. iOS网络基础---iOS-Apple苹果官方文档翻译

    CHENYILONG Blog iOS网络基础---iOS-Apple苹果官方文档翻译 iOS网络基础 技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http: ...

  6. 爬虫实战--使用Selenium模拟浏览器抓取淘宝商品美食信息

    from selenium import webdriver from selenium.webdriver.common.by import By from selenium.common.exce ...

  7. phpmywind目录结构

    phpmywind目录结构了解 admin/ 后台管理目录 admin/editor/ 后台编辑器存放目录 admin/inc/ 后台公用文件引用目录 admin/plugin/ 后台插件存放目录 a ...

  8. sniffer简单使用

    跟wireshark类似. 只是说显示的容易忘记所以丢张图记录一下. 该工具还是很坑爹的,不是比赛要用到所以都不是很想弄.一般机器运行不起来.不是蓝屏就是装了运行不了各种闪退,找了学校一台内网服务器才 ...

  9. django框架<二>

    django框架:   Models 1.基本创建 Django提供了一个抽象层("Model")的构建和管理Web应用程序的数据. Django使用一种新的方式,即:关系对象映射 ...

  10. Linux kernel学习-内存管理

    转自:https://zohead.com/archives/linux-kernel-learning-memory-management/ 本文同步自(如浏览不正常请点击跳转):https://z ...