dlntqlwsl


很裸的一道线段树题,被硬生生刷成了紫题。。可能因为细节问题吧,我也栽了一次WA50分。不过这个隐藏条件真的对本菜鸡来说不易发现啊。

未知的年份连续的就看成一个就好了,把年份都离散化一下。

分四大类(设自X以来的Y年)

  1. X未知,Y未知.(maybe)
  2. X未知,Y已知.中间夹住的区间只看有没有超过Y降雨量的就行了(false/meybe)
  3. X已知,Y已知.看中间有没有超过的有就是false并且注意看X降雨量是不是大于等于Y的降雨量(来自题目第一行),其次再看中间最小值有没有0(我把未知的年份降雨量设为0),来判断false还是true
  4. 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]降雨量[线段树裸题+细节注意]的更多相关文章

  1. POJ 3468 线段树裸题

    这些天一直在看线段树,因为临近期末,所以看得断断续续,弄得有些知识点没能理解得很透切,但我也知道不能钻牛角尖,所以配合着刷题来加深理解. 然后,这是线段树裸题,而且是最简单的区间增加与查询,我参考了A ...

  2. [SCOI2007]降雨量 线段树和区间最值(RMQ)问题

      这道题是比较经典的 \(RMQ\) 问题,用线段树维护是比较简单好写的.比较难的部分是判断处理.如果没有想好直接打代码会调很久(没错就是我).怎么维护查询区间最大值我就不再这里赘述了,不懂线段树的 ...

  3. BZOJ1067 [SCOI2007]降雨量 线段树

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1067 题意概括 给定n组整数对(Xi,Yi),当Xi<Xj且Yi>=Yj时,如果对于任 ...

  4. [bzoj1067][SCOI2007]降雨量——线段树+乱搞

    题目大意 传送门 题解 我国古代有一句俗话. 骗分出奇迹,乱搞最神奇! 这句话在这道题上得到了鲜明的体现. 我的方法就是魔改版线段树,乱搞搞一下,首先借鉴了黄学长的建树方法,直接用一个节点维护年份的区 ...

  5. CPU监控 线段树裸题

    LINK:bzoj3064 此题甚好码了20min停下来思考的时候才发现不对的地方有点坑... 还真不好写来着 可这的确是线段树的裸题...我觉得我写应该没有什么大问题 不过思路非常的紊乱 如果是自己 ...

  6. 【LOJ6029】「雅礼集训 2017 Day1」市场(线段树裸题)

    点此看题面 大致题意: 维护序列,支持区间加法,区间除法(向下取整),区间求\(min\)和区间求和. 线段树维护区间除法 区间加法.区间求\(min\)和区间求和都是线段树基本操作,因此略过不提. ...

  7. HDU1166 线段树裸题 区间求和

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  8. HDU 4893 线段树裸题

    Wow! Such Sequence! Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...

  9. cdoj 1324 卿学姐与公主 线段树裸题

    卿学姐与公主 Time Limit: 2000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit St ...

随机推荐

  1. 转:DDR中端接技术基本概念

    DDR中端接技术基本概念  版权声明:转载请注明出处:http://blog.csdn.net/lg2lh https://blog.csdn.net/lg2lh/article/details/90 ...

  2. 37:密码截取(回文串manacher算法)

    题目描述:Catcher是MCA国的情报员,他工作时发现敌国会用一些对称的密码进行通信,比如像这些ABBA,ABA,A,123321,但是他们有时会在开始或结束时加入一些无关的字符以防止别国破解.比如 ...

  3. Spring Cloud Zuul API服务网关之请求路由

    目录 一.Zuul 介绍 二.构建Spring Cloud Zuul网关 构建网关 请求路由 请求过滤 三.路由详解 一.Zuul 介绍 ​ 通过前几篇文章的介绍,我们了解了Spring Cloud ...

  4. hashCode与equals的作用与区别及应当注意的细节

    最近去面试了几家公司,被问到hashCode的作用,虽然回答出来了,但是自己还是对hashCode和equals的作用一知半解的,所以决定把它们研究一下. 以前写程序一直没有注意hashCode的作用 ...

  5. Centos 7 远程桌面客户端

    在centos下面要远程连接windows,有人说用rdesktop,但是好像centos 7没有,对从源代码编译也不大感兴趣. 幸好还有人提醒, https://geekblood.com/2014 ...

  6. Net dll版本兼容问题

    Net dll组件版本兼容问题 https://www.cnblogs.com/newP/p/9543528.html dll组件版本兼容问题,是生产开发中经常遇到的问题,常见组件兼容问题如:Newt ...

  7. 疑问:使用find_elements_by_ios_predicate定位元素组,获取元素的index没有按照顺序

    通过ios Appium Inspect查看到的元素信息如下: eList=self.driver.find_elements_by_ios_predicate('type == “XCUIEleme ...

  8. python 基础 1.4 python运算符

    一. 布尔值: 1>True 2>False       二.关系运算符 “=” (a=b):把b的值赋给a.等号赋值   “==”(a==b): 判断a与b是否相等.返回Trule或Fl ...

  9. Mybatis资料

    1. 入门案例 https://www.cnblogs.com/xdp-gacl/p/4261895.html 2. 详细笔记 以及配套视频教程: 笔记:https://blog.csdn.net/S ...

  10. 配置springMVC时出现的问题

    配置springMVC时出现的问题 项目结构如图: