降雨量 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 ...
随机推荐
- 【转载】OLE控件在Direct3D中的渲染方法
原文:OLE控件在Direct3D中的渲染方法 Windows上的图形绘制是基于GDI的, 而Direct3D并不是, 所以, 要在3D窗口中显示一些Windows中的控件会有很多问题 那么, 有什么 ...
- 【LG4317】花神的数论题
[LG4317]花神的数论题 题面 洛谷 题解 设\(f_{i,up,tmp,d}\)表示当前在第\(i\)位,是否卡上界,有\(tmp\)个一,目标是几个一的方案数 最后将所有\(d\)固定,套数位 ...
- 在sql server 中查找一定时间段内访问数据库情况
total_worker_time AS [总消耗CPU 时间(ms)], execution_count [运行次数], qs.total_worker_time AS [平均消耗CPU 时间(ms ...
- Azkaban 工作流调度器
Azkaban 工作流调度器 1 概述 1.1 为什么需要工作流调度系统 a)一个完整的数据分析系统通常都是由大量任务单元组成,shell脚本程序,java程序,mapreduce程序.hive脚本等 ...
- thinkphp5 开启多语言
一.配置点击打开链接1.开启语言包功能'lang_switch_on' => true,2.支持的语言列表'lang_list' => ['zh-cn','en-us'],二.语言定义(默 ...
- Django视图层详细介绍
1 视图函数 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. ...
- C++操作符优先级带来的错误
在刷LeetCode题目:190. 颠倒二进制位:颠倒给定的 32 位无符号整数的二进制位时,可以利用左移和右移操作符来实现数字翻转: 错误解法: class Solution { public: u ...
- Spring学习(3):Spring架构(转载)
1. Spring架构图 核心容器:包括Core.Beans.Context.EL模块. ●Core模块:封装了框架依赖的最底层部分,包括资源访问.类型转换及一些常用工具类. ●Beans模块:提供了 ...
- CsvHelper文档-5配置
CsvHelper文档-5配置 CsvHelper库被设计成快速且简单易用,但是有时候默认的是设置不符合要求,需要你自己改变一些东西.所以csvHelper内置了很多自定义设置选项来改变读写行为.特别 ...
- 十大经典排序算法总结 (Python)
作业部落:https://www.zybuluo.com/listenviolet/note/1399285 以上链接是自己在作业部落编辑的排序算法总结- Github: https://github ...