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. 前端 解决swiper js 手动滑动一下后不能自动播放

    用户操作swiper之后,是否禁止autoplay.默认为true:停止.如果设置为false,用户操作swiper之后自动切换不会停止,每次都会重新启动autoplay.操作包括触碰,拖动,点击pa ...

  2. JSoup——用Java解析html网页内容

    当需要从网页上获取信息时,需要解析html页面.筛选指定标签,并获取其值是必不可少的操作,解析html页面这方面的利器,Python有BeautifulSoup,Java一直没有好的工具,之前的Htm ...

  3. jquery博客收集的IE6中CSS常见BUG全集及解决方案

    今天的样式调的纠结,一会这边一会那么把jquery博客折腾的头大,浏览器兼容性.晚上闲着收集一些常见IE6中的BUG 3像素问题及解决办法 当使用float浮动容器后,在IE6下会产生3px的空隙,有 ...

  4. intellij idea 如何更改编辑器文本字体和大小

    换上了intellij idea之后,第一件事就是想要改变下文字字体,因为在我这个27寸的2k分辨率的屏幕上,文字显然太小了. intellij idea字体设值分成两部分,一部分是UI部分字体字号设 ...

  5. Python DBUtils

    1 简介 DBUtils是一套Python数据库连接池包,并允许对非线程安全的数据库接口进行线程安全包装.DBUtils来自Webware for Python. DBUtils提供两种外部接口: P ...

  6. c#ASP.NET中页面传值共有这么几种方式

    一.目前在ASP.NET中页面传值共有这么几种方式: 1.Response.Redirect("http://www.hao123.com",false); 目标页面和原页面可以在 ...

  7. 2.2 编程之美--不要被阶乘吓到[zero count of N factorial]

    [本文链接] http://www.cnblogs.com/hellogiser/p/zero-count-of-N-factorial.html [题目] 问题1:‍给定一个整数N,那么N的阶乘N! ...

  8. DP:Apple Catching(POJ 2385)

    牛如何吃苹果 问题大意:一个叫Bessie的牛,可以吃苹果,然后有两棵树,树上苹果每分钟会掉一个,这只牛一分钟可以在两棵树中往返吃苹果(且不吃地上的),然后折返只能是有限次W,问你这只叫Bessie的 ...

  9. 部署django应用

    Autor: wangxianlong 2016/7/10 16:17:55 环境: centos 6.5 python 2.7.5 django 1.9 nginx 1.8 selinux diab ...

  10. [Android Pro] 监听Blutooth打开广播

    <uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission a ...