【Luogu P2471】[SCOI2007]降雨量
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[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]降雨量的更多相关文章
- 洛谷P2471 [SCOI2007] 降雨量 [RMQ,模拟]
题目传送门 降雨量 题目背景 07四川省选 题目描述 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小于X ...
- P2471 [SCOI2007]降雨量
Description 我们常常会说这样的话:"X年是自Y年以来降雨量最多的".它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小于X年.例如2 ...
- BZOJ1067&P2471 [SCOI2007]降雨量[线段树裸题+细节注意]
dlntqlwsl 很裸的一道线段树题,被硬生生刷成了紫题..可能因为细节问题吧,我也栽了一次WA50分.不过这个隐藏条件真的对本菜鸡来说不易发现啊. 未知的年份连续的就看成一个就好了,把年份都离散化 ...
- 洛谷P2471——[SCOI2007]降雨量
本机AC提交RE…… 传送门:QAQQAQ 题意:自己看 思路:据说这道题用RMQ做很快,但这道题线段树是可以的 线段树维护一段区间最左年,最右年,是否有间隙和区间最大值 这道题分类讨论是一大难点,主 ...
- 【线段树 细节题】bzoj1067: [SCOI2007]降雨量
主要还是细节分析:线段树作为工具 Description 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小 ...
- [BZOJ1067][SCOI2007]降雨量
[BZOJ1067][SCOI2007]降雨量 试题描述 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意 Y<Z<X,Z年的降雨量严格 ...
- bzoj 1067: [SCOI2007]降雨量 模擬
1067: [SCOI2007]降雨量 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2010 Solved: 503[Submit][Status] ...
- 1067: [SCOI2007]降雨量
1067: [SCOI2007]降雨量 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2148 Solved: 554[Submit][Status] ...
- 【BZOJ1067】[SCOI2007]降雨量 RMQ+特判
[BZOJ1067][SCOI2007]降雨量 Description 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年 ...
随机推荐
- Java socket Tcp协议 实现文件传输
1.文件加密上传后发现文件已损坏: 原因:使用 read(byte[]) 方法不能够准确的获取到正确的字节数,有可能比 byte[].length 小,所以在解密的时候出现错误. 解决办法: 判断读取 ...
- Logstash 安装及简单实用(同步MySql数据到Elasticsearch)(Windows)
Logstash是一款轻量级的日志搜集处理框架,可以方便的把分散的.多样化的日志搜集起来,并进行自定义的处理,然后传输到指定的位置,比如某个服务器或者文件 Windows环境: 1.下载logstas ...
- [考试反思]阶段性总结:NOIP模拟测试7~13
苟且Rank#1.第二次分机房结束. 得到了喘息一会的权利. 在最后两场考试中大脸skyh慷慨舍弃264分让出Rank#1的故事也十分感人 然而还是有很多东西值得思考. 虽说是反思,但是还是有一些地方 ...
- CSPS模拟 85
WWB大佬的bitset映射真是太强了! %%% T1 观察样例,猜规律. T2 对题目的翻译工作用了很长时间 翻译错了好几次.. 观察到奇环没法染色,选的边必须把奇环弄断 如果在偶环上,偶环就变得没 ...
- Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示
目录管理命令ls:列出指定目录下的内容格式: ls [OPTION]... [FILE]... -a:显示所有文件包括隐藏文件 -A:显示除.和..之外的所有文件 -l,--long:显示 ...
- 6.1Hadoop属性Configuration配置API
6.1 Hadoop属性配置API Hadoop需要添加一些自定义的属性值,可以通过Configuration类的实例来加载xml配置文件中的属性值. (1) xml配置文件的格式 <?x ...
- 问题 A: 雷神领域
传送门 题目描述 L君,S大陆首屈一指的天才魔法师,创造了一个新魔法:雷神领域. 这个魔法会首先在地面上形成正方网格魔法阵列,然后在某些位置召唤雷电轴标.注意:一个位置只能有一个雷电轴标存在. 雷电 ...
- OI 经典诗歌
键盘行 学校机房夜送客,枫叶蒟蒻秋瑟瑟.主人下马客在船,代码欲写无键盘.夜不AC惨将别,别时茫茫屏幕亮. 忽闻楼上键盘声,主人忘归客不发.寻声暗问敲者谁,键盘声停欲语迟.上楼相近邀相见,添酒回灯重开宴 ...
- Java基础系列4:抽象类与接口的前世今生
该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 1.抽象类: 当编写 ...
- Python开发【第十三篇】高阶函数、递归函数、闭包
函数式编程是指用一系列函数解决问题 好处:用每个函数完成每个细小的功能,一系列函数任意组合能够解决大问题 函数仅仅接收输入并产生输出,不包含任何能影响输出的内部状态 函数之间的可重入性 当一个函数的输 ...