降雨量

【问题描述】

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

【输入格式】

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

【输出格式】

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

【样例输入】

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

【样例输出】

false
true
false
maybe
false

【数据范围】

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


题解:

分类大讨论······

将所有必假必真判段出来,剩下的就是有可能的情况啦

题面x、y,输入是y、x,—_—

我们按“X年的降雨量不超过Y年”来说

首先如果x的年份小于y的年份,那么肯定是假的

然后如果存在x年大于y年的降雨量,也是假的

我们用线段树查询x到y的区间最值,即题目中z的最值

如果存在x年或y年的降雨量不大于最值,还是假的

如果x年到y年的降雨量全部已知,同时最值严格小于x年,还不满足前三个条件,这就是真的

不满足前四个条件就是有可能

 #include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cmath>
using namespace std;
int n, m, x, y, u, v, a, b, ma, ye[], wa[], mx[];
inline int Max(int x, int y)
{
return (x < y) ? y : x;
}
void Build(int k, int l, int r)
{
if(l == r)
{
mx[k] = wa[l];
return;
}
int mi = l + r >> ;
Build(k << , l, mi);
Build(k << | , mi + , r);
mx[k] = Max(mx[k << ], mx[k << | ]);
}
int Ask(int k, int l, int r, int x, int y)
{
if(x <= l && r <= y) return mx[k];
int mi = l + r >> , cc = -;
if(mi >= x) cc = Max(cc, Ask(k << , l, mi, x, y));
if(mi < y) cc = Max(cc, Ask(k << | , mi + , r, x, y));
return cc;
}
int Find(int x)
{
int l = , r = n + , wz = ;
while(l <= r)
{
int mi = l + r >> ;
if(x <= ye[mi]) wz = mi, r = mi - ;
else l = mi + ;
}
return wz;
}
int main()
{
scanf("%d", &n);
for(int i = ; i <= n; ++i) scanf("%d%d", &ye[i], &wa[i]);
ye[n + ] = ;
Build(, , n);
scanf("%d", &m);
for(int i = ; i <= m; ++i)
{
scanf("%d%d", &x, &y);
if(x > y)
{
printf("false\n");
continue;
}
u = Find(x), v = Find(y);
a = (ye[u] == x), b = (ye[v] == y);
if(a && b && wa[v] > wa[u])
{
printf("false\n");
continue;
}
u -= (!a);
if(u + > v - ) ma = -;
else ma = Ask(, , n, u + , v - );
if((ma >= wa[u] && a) || (ma >= wa[v] && b))
{
printf("false\n");
continue;
}
if(a && b && (v - u) == (y - x) && (ma < wa[v]))
{
printf("true\n");
continue;
}
printf("maybe\n");
continue;
}
}

降雨量 BZOJ 1067的更多相关文章

  1. bzoj 1067: [SCOI2007]降雨量

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

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

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

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

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

  4. BZOJ 1067 降雨量

    Description 我们常常会说这样的话:"\(X\)年是自\(Y\)年以来降雨量最多的".它的含义是\(X\)年的降雨量不超过\(Y\)年,且对于任意\(Y<Z< ...

  5. BZOJ 1067:[SCOI2007]降雨量(RMQ+思维)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1067 题意:…… 思路:首先我们开一个数组记录年份,一个记录降雨量,因为年份是按升序排列的,所以我们 ...

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

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

  7. 【BZOJ 1067】 [SCOI2007]降雨量

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

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

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

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

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

随机推荐

  1. 运行spark自带的例子出错及解决

    以往都是用java运行spark的没问题,今天用scala在eclipse上运行spark的代码倒是出现了错误 ,记录 首先是当我把相关的包导入好后,Run,报错: Exception in thre ...

  2. WPF中Canvas使用

    首先知道Canvas有Left.Right.Top和Bottom这四个属性,放入Canvas的元素通过这四个属性来决定它们在Canvas里面的位置. 比如: Xaml: <Canvas Hori ...

  3. python 判断路径是否存在

    import os os.path.exists(文件绝对路径)

  4. 工程化---cnpm不是内部命令的解决

    (1)问题描述 安装完,执行cnpm -v发现报出不是内部命令. 安装成功如下图: (2)解决方案: 之前配置过默认安装都会在D:\\nodejs\node_global中,所有我们cd 到 这个路径 ...

  5. Bootstrap历练实例:导航中的表单

    Bootstrap历练实例:导航中的表单,它是使用class.navbar-form类,这确保了表单适当的垂直对齐和在较窄的视口中折叠的行为,使用这个对齐方式选项来决定导航栏中的内容放置在哪里. 实例 ...

  6. iOS开源库

    项目告一段落,总结一下最近学习到的优秀的三方库,希望能帮到别人. (一)网络中常用的 1.网络库:AFNetworking 2.图片缓存:SDWebImage 3.网络监测  Reachability ...

  7. Fortran学习笔记5(数组Array)

    数组的声明方式 一维数组 二维数组 多维数组 数组索引值的改变 自定义类型的数组定义 对数组内容的设置 利用隐含式循环设置数组初值 对整个数组操作 对部分数组的操作 where函数 Forall函数 ...

  8. MySQL中常见的锁

    一.按读写方式分类 1.读锁又称共享锁,读锁是共享的,读锁之间是互不阻塞. 2.写锁又称排他锁,写锁是排他的,写锁会阻塞其他读锁和写锁 二.按锁的粒度分类 1.表锁是MySQL中最基本的锁策略,该锁的 ...

  9. Django REST framework 的功能

    1. 认证Authentication 方法一:在配置文件中配置全局默认的认证方案 REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 're ...

  10. proto_ops和proto区别

    **proto_ops:**该结构体包含了某个特定的"protocol family"的一系列functions. 其包含的functions和struct proto很类似,但是 ...