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. 关于Class.forName("oracle.jdbc.driver.OracleDriver");报ClassNotFoundException 的异常

    关于try { Class.forName("oracle.jdbc.driver.OracleDriver"); }catch(ClassNotFoundException e) ...

  2. Features for configuring JSON-to-Java mapping

    Following on/off features are defined in DeserializationConfig.Feature (Jackson 1.x) or Deserializat ...

  3. Jersey(1.19.1) - Rules of Injection

    Previous sections have presented examples of annotated types, mostly annotated method parameters but ...

  4. vs转eclipse之工具快速上手篇

    eclipse工具下载 首先说明,本篇内容适用于刚开始学java的同学,老手大牛等可以路过. 不得不说vs确实很强大,常用的都在安装包里集成了,几乎可以一键安装,直接使用,操作起来非常方便. ecli ...

  5. asp.net发布webservice出现‘Could not write to output file ‘解决办法

    Could not write to output file 'c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET File ...

  6. Centos6.5 64linux系统基础优化(一)

    1  SecureCRT配色方案 http://blog.csdn.net/zklth/article/details/8937905 2  32位和64位Centos linux系统的区别及实际查看 ...

  7. Contoso 大学 - 使用 EF Code First 创建 MVC 应用

    原文 Contoso 大学 - 使用 EF Code First 创建 MVC 应用 Contoso 大学 Web 示例应用演示了如何使用 EF 技术创建 ASP.NET MVC 应用.示例中的 Co ...

  8. php如何判断是否为json数据(格式)

    首先要记住json_encode返回的是字符串, 而json_decode返回的是对象. 判断数据不是JSON格式:  代码如下 复制代码 function is_not_json($str){    ...

  9. Kill Session

    有时候创建索引或修改表字段时,会提示资源正忙,可以查出表对应的进程并kill掉 select l.session_id,o.owner,o.object_name from v$locked_obje ...

  10. IOS基础 Day-1手动内存管理

    辞职回家打算自学IOS开发,就在借个地方记录一下 Day-1      手动内存管理                   主要内容:release  retain必须配对好,不然会占用内存 慢慢积累导 ...