降雨量 HYSBZ - 1067(RMQ)

F.A.Qs | Home | Discuss | ProblemSet | Status | Ranklist | Contest | 入门OJ | Login | Register | 捐赠本站 |
---|
1067: [SCOI2007]降雨量
Time Limit: 1 Sec Memory Limit: 162 MB
Submit: 6491 Solved: 1727
[Submit][Status][Discuss]
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
Source
原文地址:https://blog.csdn.net/qq_26122039/article/details/51694045
这道题是求区间最大值,RMQ问题,比较复杂,题中的X是大于Y的。设fall[i]为i年降水量
1.X和Y的降水量若都不知,则直接输出maybe
2.X和Y的降水量都已知,判断fall[x] <= fall[y], 并且y+1..x-1之间降水量的最大值是否小于fall[x],还要判断一下中间是否有空的年份,用下表长度和年份长度比较即可
3.X的降水量已知,Y未知,那么y+1...x-1的降水量最大值小于fall[x]
4.X的降水量未知,Y已知,那么y+1...x-1的降水量最大值小于fall[y]
#include <iostream>
#include <cstdio>
#include <sstream>
#include <cstring>
#include <map>
#include <set>
#include <vector>
#include <stack>
#include <queue>
#include <algorithm>
#include <cmath>
#define rap(i, a, n) for(int i=a; i<=n; i++)
#define rep(i, a, n) for(int i=a; i<n; i++)
#define lap(i, a, n) for(int i=n; i>=a; i--)
#define lep(i, a, n) for(int i=n; i>a; i--)
#define MOD 2018
#define LL long long
#define ULL unsigned long long
#define Pair pair<int, int>
#define mem(a, b) memset(a, b, sizeof(a))
#define _ ios_base::sync_with_stdio(0),cin.tie(0)
//freopen("1.txt", "r", stdin);
using namespace std;
const int maxn = , INF = 0x7fffffff;
int year[maxn], fall[maxn], d[maxn][];
int n; //void rmq_init()
//{
// for(int i=0; i<=n; i++) d[i][0] = fall[i];
// for(int j=1; (1<<j) <= n; j++)
// for(int i=0; i+(1<<j) <= n; i++)
// d[i][j] = min(d[i][j-1], d[i+(1<<(j-1))][j-1]);
//}
//
//int rmq(int l, int r)
//{
// if(r < l) return -1;
// int k = 0;
// while((1<<(k+1)) <= r-l+1) k++;
// return min(d[l][k], d[r-(1<<k)+1][k]);
//} void rmq_init(){ for(int i = ; i < n; i++)
d[i][] = fall[i];
for(int j = ; (<<j) <= n; j++)
for(int i = ; i + (<<j) - < n; i++){
d[i][j] = max(d[i][j-], d[i+(<<(j-))][j-]);
}
}
int rmq(int l, int r){
if(r < l)
return -;
int k = ;
while(<<(k+) <= r - l + )
k++;
return max(d[l][k], d[r-(<<k)+][k]);
} int main()
{
scanf("%d", &n);
rep(i, , n)
{
scanf("%d%d", &year[i], &fall[i]);
}
rmq_init();
int m, a, b;
scanf("%d", &m);
while(m--)
{
int s1 = , s2 = ;
scanf("%d%d", &a, &b);
int l = lower_bound(year, year+n, a) - year;
int r = lower_bound(year, year+n, b) - year;
if(l == n || year[l] != a)
s1 = ;
if(r == n || year[r] != b)
s2 = ;
if(s1&&s2)
{
puts("maybe");
continue;
}
if(s1)
{
int h = rmq(l, r-);
if(h < fall[r])
puts("maybe");
else
puts("false");
continue;
}
if(s2)
{ int h = rmq(l+, r-);
if(h < fall[l])
puts("maybe");
else
puts("false");
continue;
}
if(fall[r] > fall[l])
{
puts("false");
continue;
}
int h = rmq(l+, r-);
// cout<< l << " " << r <<endl;
if(h < fall[r])
{
if(b-a+ == r-l+)
puts("true");
else
puts("maybe");
}
else
puts("false");
} return ;
}
降雨量 HYSBZ - 1067(RMQ)的更多相关文章
- 降雨量 BZOJ 1067
降雨量 [问题描述] 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小于X年.例如2002,2003,20 ...
- 【BZOJ】1067: [SCOI2007]降雨量(rmq+变态题)
http://www.lydsy.com/JudgeOnline/problem.php?id=1067 好不爽,弄了一个晚上. 好不爽. 还是照着别人程序拍着看的!!! 噗 这题很变态. 首先,我没 ...
- BZOJ 1067:[SCOI2007]降雨量(RMQ+思维)
http://www.lydsy.com/JudgeOnline/problem.php?id=1067 题意:…… 思路:首先我们开一个数组记录年份,一个记录降雨量,因为年份是按升序排列的,所以我们 ...
- BZOJ 1067 降雨量
Description 我们常常会说这样的话:"\(X\)年是自\(Y\)年以来降雨量最多的".它的含义是\(X\)年的降雨量不超过\(Y\)年,且对于任意\(Y<Z< ...
- 1067: [SCOI2007]降雨量
1067: [SCOI2007]降雨量 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2148 Solved: 554[Submit][Status] ...
- BZOJ 1067 降雨量(RMQ-ST+有毒的分类讨论)
1067: [SCOI2007]降雨量 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 4399 Solved: 1182 [Submit][Stat ...
- 【BZOJ】【1067】 【SCOI2007】降雨量
思路题 玛雅,这分类讨论快讨论地疯了…… 从huzecong神的题解那里得到的灵感…… 首先考虑最好确定的情况:为true的时候,此时必须同时满足 1.x和y这两年的降雨量已知,且rain[x]< ...
- bzoj 1067: [SCOI2007]降雨量 模擬
1067: [SCOI2007]降雨量 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2010 Solved: 503[Submit][Status] ...
- 【bzoj1067】[SCOI2007]降雨量 倍增RMQ
题目描述 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小于X年.例如2002,2003,2004和200 ...
随机推荐
- 「日常训练」The Necklace(UVA-10054)
代码 for(int i=0; i!=n; ++i) { int u = cin.nextInt(); int v = cin.nextInt(); edges.add(new Edge(u,v)); ...
- Python小白学习之文件内建函数
文件内建函数: 2018-10-24 23:40:02 简单介绍: open()打开文件 read()读取文件(其实是输入文件里的内容到read函数,类似于get(url),所以下面的图片备注的是 ...
- Linux系统中Oracle11g数据库的安装与验证
1.查看Linux系统的位数 2.下载Oracle10g数据库软件 https://blog.csdn.net/xiezuoyong/article/details/81197688 (需要注册Ora ...
- 中国天气网 城市代码 sql语句
mysql的 下载地址:http://download.csdn.net/detail/songzhengdong82/6252651
- Linux 安装FastDFS<准备>(使用Mac远程访问)
阅读本文需要一定的Linux基础 一 FastDFS简介 fastdfs是用c语言编写的一款开源分布式文件系统, fastdfs为互联网量身定制, 充分考虑了冗余备份, 负载均衡, 线性扩容等机制, ...
- Paper Reading - Deep Visual-Semantic Alignments for Generating Image Descriptions ( CVPR 2015 )
Link of the Paper: https://arxiv.org/abs/1412.2306 Main Points: An Alignment Model: Convolutional Ne ...
- 团队介绍&学长采访
1. 团队介绍 刘畅 博客园ID:森高Slontia 身份:PM 个人介绍: 弹丸粉 || 小说创作爱好者 || 撸猫狂魔 我绝对不知道,我一个写代码的怎么就当PM去了? 张安澜 博客园ID:Mins ...
- mysql中latin1编码中文转utf8
在mysql中,对应的表字段编码通常默认为lartin1编码,在本地客户端显示的时候看着是乱码,但是通过mysql -u -p -h命令登录后,select查询到数据是正常的,通过jdbc或者php等 ...
- python3【基础】-and和or的短路逻辑
1. 表达式只有一个逻辑运算符 python中哪些对象会被当成False,哪些又是True呢? 基本数据类型中的None.任何数值类型中的0.空字符串"",空列表[],空元组()和 ...
- 第16次Scrum会议(10/28)【欢迎来怼】
一.小组信息 队名:欢迎来怼小组成员队长:田继平成员:李圆圆,葛美义,王伟东,姜珊,邵朔,冉华小组照片 二.开会信息 时间:2017/10/28 17:20~17:32,总计12min.地点:东北师范 ...