Luogu P2471

啊啊啊啊这真是一道史上最毒瘤的题目!!!!!

题意就是给出n个年份的降雨量

询问:“自从\(y\)年以来\(x\)年的降雨量最大”的正确性。

显然有多种情况需要考虑,那么就需要通过分类讨论理清程序的逻辑了。

对于“自从\(y\)年以来\(x\)年的降雨量最大”这样一句话,可以转化成如下条件:

\(rain[x]<=rain[y]且\forall a \in [y+1,x-1]有rain[a]<rain[x]\)

经过这样的转化,我们就可以对各种情况进行分类讨论了。

定义:\(query(x,y)\)等于\(rain[x...y]\)的最大值

\[ ①rain[y]未知,rain[x]已知的情况:若此时query(y+1,x-1)>=rain[x]则导出false,反之则导出maybe\\
②rain[x]未知,rain[y]已知:若此时query(y+1,x-1)>=rain[y]则导出false,反之则导出maybe\\
③rain[x]、rain[y]均未知:则导出maybe\\
④两者皆已知:rain[x]>rain[y]导出false;query(y+1,x-1)>=rain[x]导出false\\
若以上两个条件均不符合,则不可能再导出false\\
此时再判断:若\exists a \in [y+1,x-1] 有rain[a]未知,则导出maybe\\
以上所有情况皆不符合则导出true
\]

那么剩下的事情就是把这个东西写成代码了。

Query函数可以用线段树或者st表实现。

如果使用线段树,请记住开4倍空间。

否则将像我一样疯狂WA50。(血的教训)

#include<cstdio>
#include<algorithm>
#define lson root<<1
#define rson root<<1|1
#define mid ((l+r)>>1)
using namespace std;
int tree[4*50005],rain[50005],year[50005],n,m,x,y;
void push_up(int root)
{
tree[root]=max(tree[lson],tree[rson]);
}
void build(int root,int l,int r)
{
if (l==r)
{
tree[root]=rain[l];
return ;
}
build(lson,l,mid);
build(rson,mid+1,r);
push_up(root);
}
int query_max(int root,int l,int r,int al,int ar)
{
if (al<=l&&r<=ar) return tree[root];
if (l>ar||al>r) return 0;
int ret=0;
ret=max(ret,query_max(lson,l,mid,al,ar));
ret=max(ret,query_max(rson,mid+1,r,al,ar));
return ret;
}
int main()
{
scanf("%d",&n);
for (int i=1;i<=n;i++) scanf("%d%d",&year[i],&rain[i]);
build(1,1,n);
scanf("%d",&m);
for (int i=1;i<=m;i++)
{
scanf("%d%d",&y,&x);
if (x<=y)
{
printf("false\n");
continue;
}
int locx=lower_bound(year+1,year+n+1,x)-year;
int locy=lower_bound(year+1,year+n+1,y)-year;
if (x==y+1)//其实不需要特判,只要在query函数中加一个判断,如果区间不合法则返回0即可。
{
if (year[locx]!=x) printf("maybe\n");
else if (year[locy]!=y) printf("maybe\n");
else if (rain[locx]<=rain[locy]) printf("true\n");
else printf("false\n");
continue;
}
else
{
int lx=year[locx],ly=year[locy];
if (lx==x&&ly!=y)
{
if (query_max(1,1,n,locy,locx-1)>=rain[locx]) printf("false\n");
else printf("maybe\n");
}
if (lx!=x&&ly==y)
{
if (query_max(1,1,n,locy+1,locx-1)>=rain[locy]) printf("false\n");
else printf("maybe\n");
}
if (lx!=x&&ly!=y) printf("maybe\n");
if (lx==x&&ly==y)
{
if (rain[locx]<=rain[locy])
{
if (query_max(1,1,n,locy+1,locx-1)<rain[locx])
{
if (locx-locy==x-y) printf("true\n");
else printf("maybe\n");
}
else printf("false\n");
}
else printf("false\n");
}
}
}
return 0;
}

【Luogu P2471】[SCOI2007]降雨量的更多相关文章

  1. 洛谷P2471 [SCOI2007] 降雨量 [RMQ,模拟]

    题目传送门 降雨量 题目背景 07四川省选 题目描述 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小于X ...

  2. P2471 [SCOI2007]降雨量

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

  3. BZOJ1067&P2471 [SCOI2007]降雨量[线段树裸题+细节注意]

    dlntqlwsl 很裸的一道线段树题,被硬生生刷成了紫题..可能因为细节问题吧,我也栽了一次WA50分.不过这个隐藏条件真的对本菜鸡来说不易发现啊. 未知的年份连续的就看成一个就好了,把年份都离散化 ...

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

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

  5. 【线段树 细节题】bzoj1067: [SCOI2007]降雨量

    主要还是细节分析:线段树作为工具 Description 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小 ...

  6. [BZOJ1067][SCOI2007]降雨量

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

  7. bzoj 1067: [SCOI2007]降雨量 模擬

    1067: [SCOI2007]降雨量 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2010  Solved: 503[Submit][Status] ...

  8. 1067: [SCOI2007]降雨量

    1067: [SCOI2007]降雨量 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2148  Solved: 554[Submit][Status] ...

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

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

随机推荐

  1. TCP/IP和Socket开发经验分享

    当前与网络相关的业务主要是基于tcp/ip或http,熟悉j2ee的同学一定会对http场景下的开发比较了解.但是,精通tcp/ip以及如何构建一个直接基于tcp/ip层通讯的知识却不太多见.恰巧,最 ...

  2. JS设置和获取盒模型的宽和高

    JS设置和获取盒模型的宽和高 dom.style.width/height:只能取出内联样式的宽度和高度 dom.currentStyle.width/height:获取即时的计算的样式,但是只有IE ...

  3. 在k8s上安装Jenkins及常见问题

    持续集成和部署是DevOps的重要组成部分,Jenkins是一款非常流行的持续集成和部署工具,最近试验了一下Jenkins,发现它是我一段时间以来用过的工具中最复杂的.一个可能的原因是它需要与各种其它 ...

  4. idea 2019 1 spring boot 启动报错 An incompatible version [1.2.12] of the APR based Apache Tomcat Native library is installed, while Tomcat requires version [1.2.14]

    1.构建一个简单springboot工程,日志打印报错内容如下: 15:38:28.673 [main] DEBUG org.springframework.boot.devtools.setting ...

  5. 程序员接私活经验总结,来自csdn论坛语录

    以下为网上摘录,以做笔记: 可是到网上看看,似乎接私活也有很多不容易,技术问题本身是个因素,还有很多有技术的人接私活时被骗,或者是合作到最后以失败告终,所以想请有经验的大侠们出来指点一下,接私活是怎么 ...

  6. OPTIONS 请求引发的分析

    阅读提纲: 为什么会出现 OPTIONS 请求? 什么情况下会出现 OPTIONS 请求? OPTIONS 请求会发送什么内容? 跨域前端访问后端时,所有的 Ajax HTTP 请求都会先发送一个 O ...

  7. hadoop2.6集群环境搭建

    版权声明:本文为博主原创文章,未经博主允许不得转载. 一.环境说明 1.机器:一台物理机 和一台虚拟机 2.Linux版本:[Spark@S1PA11 ~]$ cat /etc/issueRed Ha ...

  8. 使用Typescript重构axios(二十)——请求取消功能:实现第一种使用方式

    0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...

  9. Java Part 001( 01_01_Java概述 )

    Java作为编程语言, 甚至超出了语言的范畴, 成为一种开发平台, 一种开发规范. Java语言相关的JavaEE规范里, 包含了时下最流行的各种软件工程理念, 学习Java相当于系统的学习了软件开发 ...

  10. dp杂题(根据个人进度选更)

    ----19.7.30 今天又开了一个新专题,dp杂题,我依旧按照之前一样,这一个专题更在一起,根据个人进度选更题目; dp就是动态规划,本人认为,动态规划的核心就是dp状态的设立以及dp转移方程的推 ...