BZOJ1067&P2471 [SCOI2007]降雨量[线段树裸题+细节注意]
很裸的一道线段树题,被硬生生刷成了紫题。。可能因为细节问题吧,我也栽了一次WA50分。不过这个隐藏条件真的对本菜鸡来说不易发现啊。
未知的年份连续的就看成一个就好了,把年份都离散化一下。
分四大类(设自X以来的Y年)
- X未知,Y未知.(maybe)
- X未知,Y已知.中间夹住的区间只看有没有超过Y降雨量的就行了(false/meybe)
- X已知,Y已知.看中间有没有超过的有就是false并且注意看X降雨量是不是大于等于Y的降雨量(来自题目第一行),其次再看中间最小值有没有0(我把未知的年份降雨量设为0),来判断false还是true
- X已知,Y未知.有坑!要看X到Y之间有没有超过X降雨量的,有的话Y没法满足条件。
错误笔记:栽在第4点上。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define l i<<1
#define r i<<1|1
#define dbg(x) cerr<<#x<<" = "<<x<<endl
using namespace std;
typedef long long ll;
template<typename T>inline char MIN(T&A,T B){return A>B?A=B,:;}
template<typename T>inline char MAX(T&A,T B){return A<B?A=B,:;}
template<typename T>inline T _min(T A,T B){return A<B?A:B;}
template<typename T>inline T _max(T A,T B){return A>B?A:B;}
template<typename T>inline T read(T&x){
x=;int f=;char c;while(!isdigit(c=getchar()))if(c=='-')f=;
while(isdigit(c))x=x*+(c&),c=getchar();return f?x=-x:x;
}
const int N=+,inf=1e9;
int minv[N<<],maxv[N<<],A[N],year[N];
int n,m,q,nen,ryou,ql,qr,x,y,X,Y,minx,maxx;
void build(int i,int L,int R){
if(L==R){minv[i]=maxv[i]=A[L];return;}
int mid=L+R>>;build(l,L,mid),build(r,mid+,R);minv[i]=_min(minv[l],minv[r]);maxv[i]=_max(maxv[l],maxv[r]);
}
int Query_min(int i,int L,int R){
if(ql<=L&&qr>=R)return minv[i];
int mid=L+R>>,ret=inf;
if(ql<=mid)MIN(ret,Query_min(l,L,mid));
if(qr>mid)MIN(ret,Query_min(r,mid+,R));
return ret;
}
int Query_max(int i,int L,int R){
if(ql<=L&&qr>=R)return maxv[i];
int mid=L+R>>,ret=;
if(ql<=mid)MAX(ret,Query_max(l,L,mid));
if(qr>mid)MAX(ret,Query_max(r,mid+,R));
return ret;
} int main(){//freopen("test.in","r",stdin);freopen("test.out","w",stdout);
read(n);year[]=-inf-;
for(register int i=;i<=n;++i){
read(nen),read(ryou);
if(nen-==year[m])year[++m]=nen,A[m]=ryou;
else ++m,year[m]=year[m-]+,year[++m]=nen,A[m]=ryou;
}
if(year[m]<inf)++m,year[m]=year[m-]+;
build(,,m);read(q);
while(q--){
read(x),read(y);
X=upper_bound(year+,year+m+,x)-year-;
Y=upper_bound(year+,year+m+,y)-year-;//dbg(X),dbg(Y),dbg(A[X]),dbg(A[Y]);
if(!A[X]){
if(X+==Y||!A[Y])printf("maybe\n");
else{
ql=upper_bound(year+,year+m+,x+)-year-;
qr=upper_bound(year+,year+m+,y-)-year-;
maxx=Query_max(,,m);
if(maxx>=A[Y])printf("false\n");
else printf("maybe\n");
}
}
else{
if(A[Y]>A[X]){printf("false\n");continue;}
if(!A[Y]){
if(X+==Y){printf("maybe\n");continue;}
ql=upper_bound(year+,year+m+,x+)-year-;
qr=upper_bound(year+,year+m+,y-)-year-;//dbg(ql),dbg(qr);
maxx=Query_max(,,m);
if(maxx>=A[X])printf("false\n");
else printf("maybe\n");
}
else if(X+==Y)printf("true\n");
else{
ql=upper_bound(year+,year+m+,x+)-year-;
qr=upper_bound(year+,year+m+,y-)-year-;//dbg(ql),dbg(qr);
maxx=Query_max(,,m);minx=Query_min(,,m);//dbg(minx),dbg(maxx);
if(maxx>=A[Y])printf("false\n");
else if(!minx)printf("maybe\n");
else printf("true\n");
}
}
}
return ;
}
BZOJ1067&P2471 [SCOI2007]降雨量[线段树裸题+细节注意]的更多相关文章
- POJ 3468 线段树裸题
这些天一直在看线段树,因为临近期末,所以看得断断续续,弄得有些知识点没能理解得很透切,但我也知道不能钻牛角尖,所以配合着刷题来加深理解. 然后,这是线段树裸题,而且是最简单的区间增加与查询,我参考了A ...
- [SCOI2007]降雨量 线段树和区间最值(RMQ)问题
这道题是比较经典的 \(RMQ\) 问题,用线段树维护是比较简单好写的.比较难的部分是判断处理.如果没有想好直接打代码会调很久(没错就是我).怎么维护查询区间最大值我就不再这里赘述了,不懂线段树的 ...
- BZOJ1067 [SCOI2007]降雨量 线段树
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1067 题意概括 给定n组整数对(Xi,Yi),当Xi<Xj且Yi>=Yj时,如果对于任 ...
- [bzoj1067][SCOI2007]降雨量——线段树+乱搞
题目大意 传送门 题解 我国古代有一句俗话. 骗分出奇迹,乱搞最神奇! 这句话在这道题上得到了鲜明的体现. 我的方法就是魔改版线段树,乱搞搞一下,首先借鉴了黄学长的建树方法,直接用一个节点维护年份的区 ...
- CPU监控 线段树裸题
LINK:bzoj3064 此题甚好码了20min停下来思考的时候才发现不对的地方有点坑... 还真不好写来着 可这的确是线段树的裸题...我觉得我写应该没有什么大问题 不过思路非常的紊乱 如果是自己 ...
- 【LOJ6029】「雅礼集训 2017 Day1」市场(线段树裸题)
点此看题面 大致题意: 维护序列,支持区间加法,区间除法(向下取整),区间求\(min\)和区间求和. 线段树维护区间除法 区间加法.区间求\(min\)和区间求和都是线段树基本操作,因此略过不提. ...
- HDU1166 线段树裸题 区间求和
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- HDU 4893 线段树裸题
Wow! Such Sequence! Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Oth ...
- cdoj 1324 卿学姐与公主 线段树裸题
卿学姐与公主 Time Limit: 2000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit St ...
随机推荐
- CentOS 6.5语言包裁剪
https://www.ibm.com/developerworks/cn/linux/l-cn-linuxglb/ 浅析 Linux 的国际化与本地化机制 Linux 是一个国际化的操作系统,它的工 ...
- JavaOne2013 开发者大会
参加完JavaOne 2013开发者大会,把听的东西总结一下,基本上是介绍Java的最新发展情况,和对未来的展望. 现在全球有9 million 的Java开发人员,Java语言除了在传统的Enter ...
- spring boot 发布成包所需插件
在pom.xml里配置 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId> ...
- 调试Scrapy过程中的心得体会
1.大量抓取网页时出现“Memory Error”解决办法:设置一个队列,每当爬虫空闲时才向队列中放入请求,例如: from scrapy import signals, Spider from sc ...
- redis写磁盘报错Cannot allocate memory
查看 Redis 日志发现系统在频繁报错: [1821] 10 Nov 09:59:04.086 # Can't save in background: fork: Cannot allocate m ...
- 最新精品 强势来袭 XP,32/64位Win7,32/64位Win10系统【电脑城版】
随着Windows 10Build 10074 Insider Preview版发布,有理由相信,Win10离最终RTM阶段已经不远了.看来稍早前传闻的合作伙伴透露微软将在7月底正式发布Win10的消 ...
- 消息队列activeMq 使用介绍
深入浅出 消息队列 ActiveMQhttp://blog.csdn.net/jwdstef/article/details/17380471 一. 概述与介绍 ActiveMQ 是Apache出 ...
- 如何解决安装好的google浏览器打不开网页的问题?
1.Google浏览器右上角,三个点,点击一下, 2.点击设置 3.在"搜索引擎"这一栏,选择'管理搜索引擎',右边的倒三角,进入选择界面 4.在其他搜索引擎中选择"百度 ...
- ADAS
1 什么是ADAS advanced driver assistance system,即高级驾驶员辅助系统.是基于车上各种传感器的应用,如摄像头.雷达.激光器等. 2 ADAS的构成部分 2.1 a ...
- js版本的汉字转拼音
var PinYin = {"a":"\u554a\u963f\u9515","ai":"\u57c3\u6328\u54ce\u ...