【BZOJ1067】[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

6
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

false
true
false
maybe
false

HINT

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

题解:这题没啥说的,就是特判多,可以用离散化+RMQ处理区间最大值,剩下的请见hzwer的题解

还好有小号交题大法~

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
struct node
{
int v,k,org;
}p[70010];
int n,m,nm;
int f[70010][20],q[10010][2],Log[70010],ref[70010],s[70010];
bool cmp(node a,node b)
{
return a.v<b.v;
}
int query(int a,int b)
{
if(a>b) return 0;
int k=Log[b-a+1];
return max(f[a][k],f[b-(1<<k)+1][k]);
}
int main()
{
scanf("%d",&n);
int i,j;
for(i=1;i<=n;i++) scanf("%d%d",&p[i].v,&p[i].k);
scanf("%d",&m);
for(i=1;i<=m;i++) scanf("%d%d",&p[i*2-1+n].v,&p[i*2+n].v),p[i*2-1+n].org=p[i*2+n].org=i,p[i*2+n].k=1;
sort(p+1,p+n+2*m+1,cmp);
ref[0]=-1<<30;
for(i=1;i<=n+2*m;i++)
{
if(p[i].v>ref[nm]) ref[++nm]=p[i].v,s[nm]=s[nm-1];
if(!p[i].org) f[nm][0]=p[i].k,s[nm]++;
else q[p[i].org][p[i].k]=nm;
}
for(j=1;(1<<j)<=nm;j++)
for(i=1;i+(1<<j)-1<=nm;i++)
f[i][j]=max(f[i][j-1],f[i+(1<<j-1)][j-1]);
for(i=2;i<=nm;i++) Log[i]=Log[i>>1]+1;
for(i=1;i<=m;i++)
{
int qa=q[i][0],qb=q[i][1],qx=query(qa+1,qb-1),aa=(ref[qb]-ref[qa]==s[qb]-s[qa]);
if(qa>=qb) printf("false\n");
else if(f[qa][0]&&f[qb][0]&&aa&&qx<f[qb][0]&&f[qa][0]>=f[qb][0])
printf("true\n");
else if(!f[qa][0]&&!f[qb][0]) printf("maybe\n");
else if(f[qa][0]&&!f[qb][0]&&qx<f[qa][0]) printf("maybe\n");
else if(!f[qa][0]&&f[qb][0]&&qx<f[qb][0]) printf("maybe\n");
else if(!qx&&f[qa][0]>=f[qb][0]) printf("maybe\n");
else if(f[qa][0]&&f[qb][0]&&qx<f[qb][0]&&f[qa][0]>=f[qb][0]&&!aa) printf("maybe\n");
else printf("false\n");
}
return 0;
}

【BZOJ1067】[SCOI2007]降雨量 RMQ+特判的更多相关文章

  1. BZOJ1067 [SCOI2007]降雨量 RMQ???

    求救!!!神犇帮我瞅瞅呗...未完...调了2个半小时线段树,没调出来,大家帮帮我啊!!! 小詹用st表写. 我的思路就是把中间空着的年份设为无限,然后一点点特判就行了...然而没出来... [SCO ...

  2. [BZOJ1067][SCOI2007]降雨量

    [BZOJ1067][SCOI2007]降雨量 试题描述 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意 Y<Z<X,Z年的降雨量严格 ...

  3. 【线段树 细节题】bzoj1067: [SCOI2007]降雨量

    主要还是细节分析:线段树作为工具 Description 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小 ...

  4. 洛谷P2471 [SCOI2007] 降雨量 [RMQ,模拟]

    题目传送门 降雨量 题目背景 07四川省选 题目描述 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小于X ...

  5. BZOJ1067 [SCOI2007]降雨量 线段树

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1067 题意概括 给定n组整数对(Xi,Yi),当Xi<Xj且Yi>=Yj时,如果对于任 ...

  6. bzoj1067——SCOI2007降雨量(线段树,细节题)

    题目描述 我们常常会说这样的话:"X年是自Y年以来降雨量最多的".它的含义是X年的降雨量不超过Y年,且对于任意\(Y<Z<X\),Z年的降雨量严格小于X年.例如2002 ...

  7. [bzoj1067][SCOI2007]降雨量——线段树+乱搞

    题目大意 传送门 题解 我国古代有一句俗话. 骗分出奇迹,乱搞最神奇! 这句话在这道题上得到了鲜明的体现. 我的方法就是魔改版线段树,乱搞搞一下,首先借鉴了黄学长的建树方法,直接用一个节点维护年份的区 ...

  8. 1067: [SCOI2007]降雨量

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

  9. BZOJ_1067_[SCOI2007]降雨量_ST表

    BZOJ_1067_[SCOI2007]降雨量_ST表 Description 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意 Y<Z< ...

随机推荐

  1. 体验了把做HR的感觉,上午看了40份简历,说说感受

    原文链接:http://huachichi.info/2013/06/26/experience-of-being-a-hr/   这两天准备从IBM离职,不要问我为什么要在这么bug的时间离职,总之 ...

  2. 模拟循环单击事件实现layout中间panel全屏

    jquery提供了toggle方法 toggle() 方法切换元素的可见状态. 如果被选元素可见,则隐藏这些元素,如果被选元素隐藏,则显示这些元素. 语法 $(selector).toggle(spe ...

  3. 在SQL Server中调用.NET程序集

    需求是这样的,我在.net程序里操作数据时将一些字段数据加密了,这些数据是很多系统共用的,其中一delphi程序也需要用到,并且需要将数据解密,由于我在.net里加密的方式比较特殊,在delphi程序 ...

  4. Windows下Python添加MySQLdb扩展模块

    [更新 2012-09-16] 这里可以下载已经打包好的EXE文件,http://sourceforge.net/projects/mysql-python/(国内需穿越才可访问) DBank备份下载 ...

  5. 点滴积累【SQL Server】---使用Kettle实时同步DB2数据到SQLserver

    效果: 描述: 此操作适用于单点登录的同步用户. 首先,使用kettle将DB2数据同步到SQL中,然后添加到windows的任务计划中.定时执行同步数据. 特殊说明:此工具涉及到公司版权,所以不方便 ...

  6. atitit.验证码识别step2------剪贴板ClipBoard copy image图像 attilax总结

    atitit.验证码识别step2------剪贴板ClipBoard copy image图像 attilax总结 剪贴板(ClipBoard)是内存中的一块区域,是Windows内置的一个非常有用 ...

  7. 实例探索Class文件

    class文件是指以.class为文件后缀的Java虚拟机可装载文件.无论该class文件是在linux上进行编译的,还是在windows环境下编译的,无论虚拟机是在何种平台下实现和运行的,class ...

  8. CentOS上扩充lv-root空间步骤详解

    查看服务器发现vg_host01-lv_root下的空间占用的比较多,需要扩容. 有以下两种方案: )利用空余的磁盘,扩展lv_root的大小(推荐) )将lv_home的空间挪出一部分给lv_roo ...

  9. log4j2配合slf4j使用

    说明 log4j2被用于日志输出,相信绝大多数程序猿都对此不陌生.笔者刚接触log4j2,因此记个博客备用. log4j2是一个日志框架,slf4j是日志框架接口,之所以使用log4j2和slf4j搭 ...

  10. PHP学习笔记(1)数组函数

    1.数组的键值操作函数: $arr = array("小明" => 98, "小红" => 76, "小黑" => 66, ...