Description

我们常常会说这样的话:“X年是自Y年以来降雨量最多的”。它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小于X年。例如2002,2003,2004和2005年的降雨量分别为4920,5901,2832和3890,则可以说“2005年是自2003年以来最多的”,但不能说“2005年是自2002年以来最多的”由于有些年份的降雨量未知,有的说法是可能正确也可以不正确的。

Input

输入仅一行包含一个正整数n,为已知的数据。以下n行每行两个整数yi和ri,为年份和降雨量,按照年份从小到大排列,即yi<yi+1。下一行包含一个正整数m,为询问的次数。以下m行每行包含两个数Y和X,即询问“X年是自Y年以来降雨量最多的。”这句话是必真、必假还是“有可能”。

Output

对于每一个询问,输出true,false或者maybe。

Sample Input

6
2002 4920
2003 5901
2004 2832
2005 3890
2007 5609
2008 3024
5
2002 2005
2003 2005
2002 2007
2003 2007
2005 2008

Sample Output

false
true
false
maybe
false

HINT

100%的数据满足:1<=n<=50000, 1<=m<=10000, -10^9<=yi<=10^9, 1<=ri<=10^9

 
线段树显然,考虑各种情况
有一种总是忘了,当不存在末尾年份时,若存在比开头年份降雨量还大的年份就是false
 #include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=;
int n,m,l,r,mx,cnt;
int year[N],w[N];
struct tree{int l,r,mx,lch,rch;}tr[N*]; void build(int k,int l,int r){
int mid=(l+r)>>;
tr[++cnt].l=l,tr[cnt].r=r;
if(l==r) return;
tr[k].lch=cnt+;build(cnt+,l,mid);
tr[k].rch=cnt+;build(cnt+,mid+,r);
} void ins(int k,int x){
int mid=(tr[k].l+tr[k].r)>>,lc=tr[k].lch,rc=tr[k].rch;
if(tr[k].l==tr[k].r){tr[k].mx=w[x];return;}
if(x>mid) ins(rc,x);else ins(lc,x);
tr[k].mx=max(tr[lc].mx,tr[rc].mx);
} int query_max(int k,int l,int r){
if(l>r) return ;
int mid=(tr[k].l+tr[k].r)>>,lc=tr[k].lch,rc=tr[k].rch;
if(tr[k].l==l&&tr[k].r==r) return tr[k].mx;
if(r<=mid) return query_max(lc,l,r);
else if(l>mid) return query_max(rc,l,r);
else return max(query_max(lc,l,mid),query_max(rc,mid+,r));
} int main(){
scanf("%d",&n);
build(,,n);
for(int i=;i<=n;i++) scanf("%d%d",&year[i],&w[i]),ins(,i);
scanf("%d",&m);
for(int i=;i<=m;i++){
scanf("%d%d",&l,&r);
if(r==year[]||l==year[n]) {printf("maybe\n");continue;}
int x=lower_bound(year+,year++n,l)-year;
int y=lower_bound(year+,year++n,r)-year;
int xx=(year[x]==l),yy=(year[y]==r);
if(!xx&&!yy) {printf("maybe\n");continue;}
if(!xx&&yy){
mx=query_max(,x,y-);
if(mx<w[y]) printf("maybe\n");else printf("false\n");
continue;
}
if(xx&&!yy){
mx=query_max(,x+,y-);
if(mx<w[x]) printf("maybe\n");else printf("false\n");
continue;
}
if(xx&&yy) {
if(w[x]<w[y]) {printf("false\n");continue;};
mx=query_max(,x+,y-);
if(mx>=w[y]){printf("false\n");continue;}
if((y-x)!=(year[y]-year[x])) {printf("maybe\n");continue;}
printf("true\n");
}
}
}

【BZOJ 1067】 [SCOI2007]降雨量的更多相关文章

  1. bzoj 1067: [SCOI2007]降雨量

    题目链接: bzoj 1067: [SCOI2007]降雨量 题解: 很简单的一道题,但代码里有许多细节需要注意,切容易出错,调了三个小时OTZ 做一个st表维护区间最大值就 在获得年份在序列中的po ...

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

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

  3. bzoj 1067: [SCOI2007]降雨量 (离散化+线段树)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1067 思路: 毒瘤题,写的自闭,改了一晚上,注意要理清题目的逻辑 x小于等于y,x,y之间的 ...

  4. 洛谷 2471 BZOJ 1067 [SCOI2007]降雨量

    [题解] 用线段树维护区间最大值(因为没有修改,St表也可以),然后由于x,y可能是降雨量未知的年份,需要进行分类讨论. #include<cstdio> #include<algo ...

  5. 1067: [SCOI2007]降雨量

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

  6. 【BZOJ】1067: [SCOI2007]降雨量(rmq+变态题)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1067 好不爽,弄了一个晚上. 好不爽. 还是照着别人程序拍着看的!!! 噗 这题很变态. 首先,我没 ...

  7. 1067: [SCOI2007]降雨量 - BZOJ

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

  8. 1067. [SCOI2007]降雨量【线段树】

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

  9. BZOJ 1067 降雨量(RMQ-ST+有毒的分类讨论)

    1067: [SCOI2007]降雨量 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 4399  Solved: 1182 [Submit][Stat ...

  10. BZOJ 1067 & Interval_Tree

    1067: [SCOI2007]降雨量 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 3099 Solved: 800 Description 我们常常 ...

随机推荐

  1. oracle数据库性能调优

    一:注意WHERE子句中的连接顺序: ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子 ...

  2. JAVA基础之理解JNI原理

    JNI是JAVA标准平台中的一个重要功能,它弥补了JAVA的与平台无关这一重大优点的不足,在JAVA实现跨平台的同时,也能与其它语言(如C.C++)的动态库进行交互,给其它语言发挥优势的机会. 有了J ...

  3. Android--仿QQ侧滑菜单

    首先还是先看一下效果图吧,这个示例在网上能找到很多,我主要在此是做一个小结和一些代码的分析,当是自己在学习过程中的一个积累,因为网上同样的文章很多,所以也无法探究最初的来源是哪里了. 我们可以从效果图 ...

  4. Win8、Win10进入SQL server配置管理器

    使用 WIN8.WIN10 访问 SQL Server 配置管理器 因为 SQL Server 配置管理器是 Microsoft 管理控制台程序的一个管理单元而不是单独的程序,所以,当运行 Windo ...

  5. BUG修改纪录

    刚进入现在的公司,接手了一个遗留的项目,BUG频出,最近一个星期都在加班改BUG,身心疲惫,为了 现在,将来不会再被相同BUG困扰,特来纪录一下. 1.数据库设计字段时,对于int等类型最好设置默认值 ...

  6. 返回页面,主页面不刷新window.history.go(-1),主页面刷新window.location.go(-1)

    返回上一页,不刷新 window.history.go(-1) 返回上一页,刷新 window.location.go(-1)

  7. Ant 修改项目pom.xml文件应用

    <?xml version="1.0" encoding="UTF-8"?> <project name="project" ...

  8. js 获取 当前时间 时间差 时间戳 倒计时

    开发web一段时间后发现经常使用时间进行一些操作,比较多的就是获取当前时间.对时间进行比较.时间倒计时.时间戳这些部分,每次去用经常忘总是需要去查询,还是自己总结一下比较靠谱. 获取时间戳的方法: 第 ...

  9. Script 代码段

    script代码段 1.script代码段的执行 在Javascript代码中,可以使用script作为基本标识,script代码段在运行过程中是分段解析与执行的. 2.script代码段执行流程 在 ...

  10. Adobe Photoshop CS4 Extended CS4 激活序列号

    Adobe Photoshop CS4 Extended CS4 激活序列号(SN):1330-1779-4488-2103-6954-09161330-1170-1002-7856-5023-077 ...