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 ...
随机推荐
- Android 开源项目精选
0x00 leakcanary [内存泄漏检测] Leakcanary : A memory leak detection library for Android and Java. 良心企业Squ ...
- 看完这篇再不会 View 的动画框架,我跪搓衣板
引言 众所周知,一款没有动画的 app,就像没有灵魂的肉体,给用户的体验性很差.现在的 android 在动画效果方面早已空前的发展,1.View 动画框架 2.属性动画框架 3.Drawable 动 ...
- python爬虫获取百度图片(没有精华,只为娱乐)
python3.7,爬虫技术,获取百度图片资源,msg为查询内容,cnt为查询的页数,大家快点来爬起来.注:现在只能爬取到百度的小图片,以后有大图片的方法,我会陆续发贴. #!/usr/bin/env ...
- zookeeper参数的详解
安装和配置详解 本文介绍的 Zookeeper 是以 3.2.2 这个稳定版本为基础,最新的版本可以通过官网 http://hadoop.apache.org/zookeeper/来获取,Zookee ...
- 讲真,你是因为什么才买华为P20系列手机!
华为P20系列手机上市两个半月发货600万台!600万台?!看到这个亮瞎我钛合金狗眼的数据,且容我掰着手指脚趾算一下,算了,还是容我毫不夸张的感叹一句吧:华为做手机不用桨,不需风,全靠“浪”……. 两 ...
- 不错的iOS相关的主页或站点 (更新于14-06-22)
近期一直没事在翻一些站点看看资料学习下. 推荐几个不错的站点: http://www.raywenderlich.com/ 这个站点有各种各样的教程,可惜是大部分都是英文教程,只是阅读起来还好.每 ...
- 如何给UIViewController瘦身
本文转载至 http://www.cocoachina.com/ios/20141128/10356.html 随着程序逻辑复杂度的提高,你是否也发现了App中一些ViewController的代码 ...
- python 基础 4.3 高阶函数下和匿名函数
一 .匿名函数 顾名思议就是没有名字的函数,那为什么要设立匿名函数,他有什么作用呢?lambda 函数就是一种快速定义单行的最小函数,可以用在任何需要函数的地方. 常规版: def fun(x,y ...
- python 基础 1.5 python数据类型(二)--列表常用方法示例
#/usr/bin/python #coding=utf-8 #@Time :2017/10/12 23:30 #@Auther :liuzhenchuan #@File :列表.py lis ...
- HTML5(石头剪刀布游戏开发)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...