http://www.lydsy.com/JudgeOnline/problem.php?id=1067

好不爽,弄了一个晚上。

好不爽。

还是照着别人程序拍着看的!!!

噗

这题很变态。

首先,我没看清楚题,以为是严格上升!!!!!!所以误导了我。

然后这题的判定非常hentai!!

我们来考虑true的情况【x年到y年】:

  1. x已知并且y已知
  2. y年降水量不超过x年
  3. x+1到y-1年已知并且都小于y年降水量

然后是maybe的情况【x年到y年】:

  1. x已知并且y已知
  2. y年降水量不超过x年
  3. x+1到y-1年至少有一年未知并且已知的都小于y年降水量

或

  1. x已知或y已知
  2. 若x已知,那么x+1到y年至少有一年未知并且已知的都小于x年降水量
  3. 若y已知,那么x到y-1年至少有一年未知并且已知的都小于y年降水量

最后是false的情况,如果不是以上两种情况,就是false

很变态!

#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
#define rep(i, n) for(int i=0; i<(n); ++i)
#define for1(i,a,n) for(int i=(a);i<=(n);++i)
#define for2(i,a,n) for(int i=(a);i<(n);++i)
#define for3(i,a,n) for(int i=(a);i>=(n);--i)
#define for4(i,a,n) for(int i=(a);i>(n);--i)
#define CC(i,a) memset(i,a,sizeof(i))
#define read(a) a=getint()
#define print(a) printf("%d", a)
#define dbg(x) cout << #x << " = " << x << endl
#define printarr(a, n, m) rep(aaa, n) { rep(bbb, m) cout << a[aaa][bbb]; cout << endl; }
inline const int getint() { int r=0, k=1; char c=getchar(); for(; c<'0'||c>'9'; c=getchar()) if(c=='-') k=-1; for(; c>='0'&&c<='9'; c=getchar()) r=r*10+c-'0'; return k*r; }
inline const int max(const int &a, const int &b) { return a>b?a:b; }
inline const int min(const int &a, const int &b) { return a<b?a:b; } const int N=100005, M=10005;
int d[N][20], a[N], w[N], n, o; void st() {
for1(i, 1, n) d[i][0]=w[i];
for(int j=1; (1<<j)<=n; ++j)
for(int i=1; i+(1<<(j-1))<=n; ++i)
d[i][j]=max(d[i][j-1], d[i+(1<<(j-1))][j-1]);
}
inline const int getmax(const int &l, const int &r) {
if(l>r) return -2000000000;
int s=r-l+1, k=0;
while((1<<(k+1))<=s) ++k;
return max(d[l][k], d[r-(1<<k)+1][k]);
}
inline int getpos(const int &x) {
return lower_bound(a+1, a+1+n, x)-a;
} int main() {
read(n);
for1(i, 1, n) { read(a[i]); read(w[i]); }
read(o);
st();
int x, y, m, r, l, ans;
for1(i, 1, o) {
read(x); read(y);
l=getpos(x), r=getpos(y);
bool nl=(l<=n && a[l]==x), nr=(r<=n && a[r]==y);
if(nl) {
if(nr) { //true条件1,maybe第一种情况的条件1
m=getmax(l+1, r-1);
if(w[l]<w[r]) ans=0; //true条件2,maybe第一种情况的条件2
else if(m<w[r]) { //true条件3
if(r-l==y-x) ans=1; //true条件3
else ans=-1; //maybe第一种情况的条件3
}
else ans=0;
}
else {
m=getmax(l+1, r-1); //这里要注意,因为getpos是开区间,会飙到外边,所以是r-1
if(m<w[l]) ans=-1; //maybe第二种情况的条件2
else ans=0;
}
}
else {
if(nr) {
m=getmax(l, r-1);
if(m<w[r]) ans=-1;
else ans=0;
}
else ans=-1;
}
if(ans==1) puts("true");
else if(ans==-1) puts("maybe");
else puts("false");
}
return 0;
}

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

Source

【BZOJ】1067: [SCOI2007]降雨量(rmq+变态题)的更多相关文章

  1. bzoj 1067: [SCOI2007]降雨量

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

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

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

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

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

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

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

  5. 1067: [SCOI2007]降雨量

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

  6. 【BZOJ1067】[SCOI2007]降雨量 RMQ+特判

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

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

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

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

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

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

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

随机推荐

  1. php如何将数组保存为文件的方法? 三个方法让你快速把数组保存成为文件存储

    php 缓存数组形式的变量,实际上就是将 php 将数组写入到一个文本文件或者后缀名为 .php 存储起来,使用的时候直接调用这个文件.那么如何使用 php 将数组保存为文本格式的文件呢?下面分享三种 ...

  2. 【Markdown】notepad++ 支持 markdown语法、预览

    Notepad++中支持Markdown   最近在学习Markdown语言的使用,很想在XP主机上使用Markdown的离线编辑器,但MarkdownPad.作业部分的离线客户端都不能再XP上运行, ...

  3. MVC ActionResult JsonResult

    以下是ActionResult的继承图: 大概的分类: EmptyResult:表示不执行任何操作的结果 ContentResult :返回文本结果 JavaScriptResult:返回结果为Jav ...

  4. ASP.NET - 视图状态概述

    本文转载自dodream 视图状态是 ASP.NET 页框架用于在往返过程之间保留页和控件值的方法.在呈现页的 HTML 标记时,必须在回发过程中保留的页和值的当前状态将被序列化为Base64 编码字 ...

  5. iOS国际化(Xcode5)

    如何将你的app内的语言可以根据系统语言切换而切换呢?这是本篇所要解决的问题.废话先不说,上软硬件环境: 硬件:Macbook Pro 软件:Xcode 5.1 代码:https://github.c ...

  6. hdu 1879 继续畅通工程 解题报告

    题目链接:http://code.hdu.edu.cn/showproblem.php?pid=1879 这条题目我的做法与解决Constructing Roads的解法是相同的. 0 表示没有连通: ...

  7. Extjs的radio单选框的使用

    Extjs的radio的FormPanel的代码如下: {  xtype : 'radiogroup',    fieldLabel : '是否置顶',    name:'isTop',     it ...

  8. c# 正则表达式 匹配回车

    1 "." 匹配除 "\n" 之外的任何单个字符,一般用".*?"匹配不包括回车的任意字符. 2 我们在用正则表达式分析html或者是xml ...

  9. git linux

    第一节 GIT最初是由Linus Benedict Torvalds为了更有效地管理Linux内核开发而创立的分布式版本控制软件,与常用的版本控制工具如CVS.Subversion不同,它不必服务器端 ...

  10. hp unix_ssh

    http://www.cyberciti.biz/faq/howto-hpux-sshd-service-startup-shutdown/ http://searchnetworking.techt ...