【BZOJ 1067】 [SCOI2007]降雨量
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
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
true
false
maybe
false
HINT
100%的数据满足:1<=n<=50000, 1<=m<=10000, -10^9<=yi<=10^9, 1<=ri<=10^9
#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]降雨量的更多相关文章
- bzoj 1067: [SCOI2007]降雨量
题目链接: bzoj 1067: [SCOI2007]降雨量 题解: 很简单的一道题,但代码里有许多细节需要注意,切容易出错,调了三个小时OTZ 做一个st表维护区间最大值就 在获得年份在序列中的po ...
- bzoj 1067: [SCOI2007]降雨量 模擬
1067: [SCOI2007]降雨量 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2010 Solved: 503[Submit][Status] ...
- bzoj 1067: [SCOI2007]降雨量 (离散化+线段树)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1067 思路: 毒瘤题,写的自闭,改了一晚上,注意要理清题目的逻辑 x小于等于y,x,y之间的 ...
- 洛谷 2471 BZOJ 1067 [SCOI2007]降雨量
[题解] 用线段树维护区间最大值(因为没有修改,St表也可以),然后由于x,y可能是降雨量未知的年份,需要进行分类讨论. #include<cstdio> #include<algo ...
- 1067: [SCOI2007]降雨量
1067: [SCOI2007]降雨量 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2148 Solved: 554[Submit][Status] ...
- 【BZOJ】1067: [SCOI2007]降雨量(rmq+变态题)
http://www.lydsy.com/JudgeOnline/problem.php?id=1067 好不爽,弄了一个晚上. 好不爽. 还是照着别人程序拍着看的!!! 噗 这题很变态. 首先,我没 ...
- 1067: [SCOI2007]降雨量 - BZOJ
Description 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小于X年.例如2002,2003,2 ...
- 1067. [SCOI2007]降雨量【线段树】
Description 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意 Y<Z<X,Z年的降雨量严格小于X年.例如2002,2003, ...
- BZOJ 1067 降雨量(RMQ-ST+有毒的分类讨论)
1067: [SCOI2007]降雨量 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 4399 Solved: 1182 [Submit][Stat ...
- BZOJ 1067 & Interval_Tree
1067: [SCOI2007]降雨量 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 3099 Solved: 800 Description 我们常常 ...
随机推荐
- 关于Class.forName("oracle.jdbc.driver.OracleDriver");报ClassNotFoundException 的异常
关于try { Class.forName("oracle.jdbc.driver.OracleDriver"); }catch(ClassNotFoundException e) ...
- Features for configuring JSON-to-Java mapping
Following on/off features are defined in DeserializationConfig.Feature (Jackson 1.x) or Deserializat ...
- Jersey(1.19.1) - Rules of Injection
Previous sections have presented examples of annotated types, mostly annotated method parameters but ...
- vs转eclipse之工具快速上手篇
eclipse工具下载 首先说明,本篇内容适用于刚开始学java的同学,老手大牛等可以路过. 不得不说vs确实很强大,常用的都在安装包里集成了,几乎可以一键安装,直接使用,操作起来非常方便. ecli ...
- 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 ...
- Centos6.5 64linux系统基础优化(一)
1 SecureCRT配色方案 http://blog.csdn.net/zklth/article/details/8937905 2 32位和64位Centos linux系统的区别及实际查看 ...
- Contoso 大学 - 使用 EF Code First 创建 MVC 应用
原文 Contoso 大学 - 使用 EF Code First 创建 MVC 应用 Contoso 大学 Web 示例应用演示了如何使用 EF 技术创建 ASP.NET MVC 应用.示例中的 Co ...
- php如何判断是否为json数据(格式)
首先要记住json_encode返回的是字符串, 而json_decode返回的是对象. 判断数据不是JSON格式: 代码如下 复制代码 function is_not_json($str){ ...
- Kill Session
有时候创建索引或修改表字段时,会提示资源正忙,可以查出表对应的进程并kill掉 select l.session_id,o.owner,o.object_name from v$locked_obje ...
- IOS基础 Day-1手动内存管理
辞职回家打算自学IOS开发,就在借个地方记录一下 Day-1 手动内存管理 主要内容:release retain必须配对好,不然会占用内存 慢慢积累导 ...