BZOJ 1067:[SCOI2007]降雨量(RMQ+思维)
http://www.lydsy.com/JudgeOnline/problem.php?id=1067
题意:……
思路:首先我们开一个数组记录年份,一个记录降雨量,因为年份是按升序排列的,所以我们在每个询问找下标的时候可以二分搜索,然后对于每个询问我们是要寻找区间的最大值,因此我们可以使用ST表来做。比较麻烦的是判断三种答案的情况,做了一个下午。假设询问输入的是X和Y(X < Y)接下来分为四种情况:
1、X是已知,Y是已知。那么这是最容易想到的情况。
1-1、如果在[X+1,Y-1]区间中存在大于等于Y的降雨量,或者Y的降雨量大于X的降雨量,那么就输出false。
1-2、否则如果[X+1,Y-1]中存在未知年份,那么就输出maybe。
1-3、否则输出true。
2、X是已知,Y是未知。
2-1、如果在[X+1,Y]区间中存在大于等于X的降雨量,那么输出false。
2-2、否则输出maybe。
这里要注意如果X+1 > Y的情况,那么肯定是输出maybe的。要特判一下。(坑了好久)
3、X是未知,Y是已知。
3-1、如果在[X,Y-1]区间中存在大于等于Y的降雨量,那么输出false。
3-2、否则输出maybe。
4、X是未知,Y是未知。
4-1、直接输出maybe。
这里lower_bound()返回的是大于等于x的下标,upper_bound() - 1返回的是小于等于x的下标。
判断存在不存在就直接是二分后的下标和本身是不是相等的,而不用用到map这样的数据结构判断。
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
using namespace std;
#define N 50010
#define INF 0x3f3f3f3f int n, year[N], fall[N], dp[N][]; void RMQ_Init() {
for(int i = ; i <= n; i++) dp[i][] = fall[i];
int ed = (int)(log(n) / log(2.0));
for(int j = ; j <= ed; j++)
for(int i = ; i + ( << j) - <= n; i++)
dp[i][j] = max(dp[i][j-], dp[i+(<<(j-))][j-]);
} int RMQ_Query(int l, int r) {
if(l > r) return -INF; // !!!!!
int ed = (int)(log(r - l + 1.0) / log(2.0));
return max(dp[l][ed], dp[r-(<<ed)+][ed]);
} int main() {
int q;
while(~scanf("%d", &n)) {
for(int i = ; i <= n; i++) scanf("%d%d", &year[i], &fall[i]);
RMQ_Init();
scanf("%d", &q);
while(q--) {
int l, r; scanf("%d%d", &l, &r);
if(l > r) { puts("false"); continue; }
int lid = lower_bound(year + , year + + n, l) - year;
int rid = upper_bound(year + , year + + n, r) - year - ;
int ans, res;
if(year[lid] != l) {
ans = RMQ_Query(lid, rid - );
if(year[rid] != r) puts("maybe");
else if(ans >= fall[rid]) puts("false");
else puts("maybe");
} else if(year[rid] != r) {
ans = RMQ_Query(lid + , rid);
if(ans >= fall[lid]) puts("false");
else puts("maybe");
} else {
ans = RMQ_Query(lid + , rid - );
if(fall[rid] <= ans || fall[lid] < fall[rid]) puts("false");
else if(rid - lid != year[rid] - year[lid]) puts("maybe");
else puts("true");
}
}
}
return ;
} /*
2
2000 4000
2005 4500
1
2005 2010 maybe
*/
BZOJ 1067:[SCOI2007]降雨量(RMQ+思维)的更多相关文章
- 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] ...
- 【BZOJ1067】[SCOI2007]降雨量 RMQ+特判
[BZOJ1067][SCOI2007]降雨量 Description 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年 ...
- BZOJ1067 [SCOI2007]降雨量 RMQ???
求救!!!神犇帮我瞅瞅呗...未完...调了2个半小时线段树,没调出来,大家帮帮我啊!!! 小詹用st表写. 我的思路就是把中间空着的年份设为无限,然后一点点特判就行了...然而没出来... [SCO ...
- 【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 ...
- 洛谷P2471 [SCOI2007] 降雨量 [RMQ,模拟]
题目传送门 降雨量 题目背景 07四川省选 题目描述 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小于X ...
随机推荐
- MSRA专访摘要
前段时间有幸参加微软亚洲研究院之旅,顺便投简历,没想到在两次访谈迎来,并且是连续 的两次被拒绝.严重的刺激到了我.导致我疯狂的复习刷Offer.如今最终算是告于段落.如今也最终有空沉下心来总结 总结近 ...
- WPF中Style文件的引用——使用xaml代码或者C#代码动态加载
原文:WPF中Style文件的引用--使用xaml代码或者C#代码动态加载 WPF中控件拥有很多依赖属性(Dependency Property),我们可以通过编写自定义Style文件来控制控件的外观 ...
- ASP .NET My97DatePicker
My97DatePicker http://jingyan.baidu.com/article/e6c8503c7244bae54f1a18c7.html <input type="t ...
- WPF:如何为程序添加splashScreen?
原文:WPF:如何为程序添加splashScreen? 大家是否还记得在Windows Forms程序中如何实现splashScreen吗?我们一般都会使用Microsoft.VisualBasic. ...
- Visual Studio查找中文的正则表达式
原文: Visual Studio查找中文的正则表达式 经常有这样的需求:项目代码中有一些输出信息是中文写的,不过现在要做国际化,代码""中写的中文都要改成英文.这样就需要将代码中 ...
- 十七 bootstrap-table tableExport 导出xlsx格式表格
原文:十七 bootstrap-table tableExport 导出xlsx格式表格 在[十六.bootstrap-table javascript导出数据]中,打开导出的表格时,总会弹出一个提示 ...
- 浏览器禁用cookie后php如何保持session会话-use_trans_sid机制
原文:浏览器禁用cookie后php如何保持session会话-use_trans_sid机制 为防止浏览器禁用cookie导致服务器会话无法保持,php开发了一个机制,该机制开启后,浏览器发起请求后 ...
- 零元学Expression Blend 4 - Chapter 37 看如何使用Clip修出想要的完美曲线(上)
原文:零元学Expression Blend 4 - Chapter 37 看如何使用Clip修出想要的完美曲线(上) 几何外部的 UIElement 会在呈现的配置中以视觉化方式裁剪. 几何不一定要 ...
- mysql 服务压缩包安装,用户创建
wind7上安装mysql记录: 1.下载的包中没有ini配置文件,需要根目录手动创建my.ini文件 内容如下: [client]port=3306default-character-set=utf ...
- Android零基础入门第33节:Android事件处理概述
原文:Android零基础入门第33节:Android事件处理概述 通过对Android基本组件的学习,也有接触少部分Android的事件处理,比如按钮的点击事件.选框的状态切换事件. 一.Andro ...