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\)行每行两个整数\(y_{i}\)和\(r_{i}\),为年份和降雨量,按照年份从小到大排列,即\(y_{i}<y_{i}+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 \le n \le 50000, 1 \le m \le 10000, -10^{9} \le y_{i} \le 10^{9}, 1 \le r_{i} \le 10^{9}\)

线段树或rmq都可以做啊。

#include<cstdio>
#include<cstdlib>
using namespace std; #define inf (1<<30)
#define maxn (50010)
#define maxm (10010)
int n,m;
struct node
{
int a,b;
inline void read() { scanf("%d %d",&a,&b); }
friend inline bool operator >(const node &x,const node &y) { return x.b != y.b?x.b>y.b:x.a<y.a; }
friend inline bool operator != (const node &x,const node &y) { return x.a!=y.a||x.b!=y.b; }
}rain[maxn],seg[maxn*4]; inline node Max(const node &x,const node &y) { if (x > y) return x; return y; } inline int find(int key)
{
int l = 1,r = n;
while (l <= r)
{
int mid = (l + r) >> 1;
if (rain[mid].a <= key) l = mid + 1;
else r = mid - 1;
}
return l;
} inline void build(int l,int r,int now)
{
if (l == r) { seg[now] = rain[l]; return; }
int mid = (l + r) >> 1;
build(l,mid,now<<1); build(mid+1,r,now<<1|1);
seg[now] = Max(seg[now<<1],seg[now<<1|1]);
} inline node ask(int l,int r,int now,int ql,int qr)
{
if (ql > qr) return (node){-inf,-inf};
if (l >= ql&&r <= qr) return seg[now];
int mid = (l + r) >> 1;
if (qr <= mid) return ask(l,mid,now<<1,ql,qr);
else if (ql > mid) return ask(mid+1,r,now<<1|1,ql,qr);
else return Max(ask(l,mid,now<<1,ql,mid),ask(mid+1,r,now<<1|1,mid+1,qr));
} int main()
{
freopen("1067.in","r",stdin);
freopen("1067.out","w",stdout);
scanf("%d",&n);
for (int i = 1;i <= n;++i) rain[i].read();
rain[0].a = -inf;
build(1,n,1);
scanf("%d",&m);
for (int i = 1;i <= m;++i)
{
int x,y; scanf("%d %d",&x,&y);
int l = find(x)-1,r = find(y)-1;
if (rain[l].a != x&&rain[r].a != y) printf("maybe\n");
else if (rain[l].a == x && rain[r].a == y)
{
if (ask(1,n,1,l,r-1) != rain[l]||ask(1,n,1,l+1,r) != rain[r]) printf("false\n");
else
{
if (rain[l].b < rain[r].b) printf("false\n");
else
{
if (r-l+1 == y-x+1) printf("true\n");
else printf("maybe\n");
}
}
}
else
{
if (rain[l].a == x)
{
if (ask(1,n,1,l,r) != rain[l]||ask(1,n,1,l+1,r).b == rain[l].b) printf("false\n");
else printf("maybe\n");
}
else
{
if (ask(1,n,1,l+1,r) != rain[r]) printf("false\n");
else printf("maybe\n");
}
}
}
fclose(stdin); fclose(stdout);
return 0;
}

BZOJ 1067 降雨量的更多相关文章

  1. BZOJ 1067 降雨量(RMQ-ST+有毒的分类讨论)

    1067: [SCOI2007]降雨量 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 4399  Solved: 1182 [Submit][Stat ...

  2. bzoj 1067: [SCOI2007]降雨量

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

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

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

  4. BZOJ 1067:[SCOI2007]降雨量(RMQ+思维)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1067 题意:…… 思路:首先我们开一个数组记录年份,一个记录降雨量,因为年份是按升序排列的,所以我们 ...

  5. 【BZOJ 1067】 [SCOI2007]降雨量

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

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

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

  7. 降雨量 BZOJ 1067

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

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

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

  9. BZOJ 1067 & Interval_Tree

    1067: [SCOI2007]降雨量 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 3099 Solved: 800 Description 我们常常 ...

随机推荐

  1. 【Android - MD】之CoordinatorLayout的使用

    CoordinatorLayout是Android 5.0新特性--Material Design中的一个布局控件,主要用来协调各个子视图之间的工作,也可以用来作为顶部布局.CoordinatorLa ...

  2. 如何制作iso文件

    UltraISO 9.6.2.3059中文完美破解安装版 http://www.upantool.com/qidong/2011/UltraISO_v9.5.0.2800.html 软碟通v9.6.2 ...

  3. Mean Shift具体介绍

    Mean Shift,我们 翻译为“均值飘移”.其在聚类,图像平滑.图像切割和跟踪方面得到了比較广泛的应用.因为本人眼下研究跟踪方面的东西,故此主要介绍利用Mean Shift方法进行目标跟踪,从而对 ...

  4. Latex插入图片 分类: LaTex 2014-11-18 20:07 261人阅读 评论(0) 收藏

    在Latex中插入图片的方式很多,我这里只介绍自己常用的一种方式,欢迎大家指导. 我习惯于使用graphicx宏包来插入图片,有时候会配合上subfigure宏包来同时插入多幅图片组合. 首先,需要在 ...

  5. iOS 百度地图 小的特点demo

    先上图的样子 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDEyMzIwOA==/font/5a6L5L2T/fontsize/400/fill ...

  6. 初步掌握MapReduce的架构及原理

    目录 1.MapReduce定义 2.MapReduce来源 3.MapReduce特点 4.MapReduce实例 5.MapReduce编程模型 6.MapReduce 内部逻辑 7.MapRed ...

  7. 10.6 noip模拟试题

    更正:第三组:不存在相同的字符|str|=26,26<=n<=100 60 /* 呵呵哒~这题 正解还在研究.... 因为没有题解只有个std还在看 不过乱搞一下可以70(数据好像有问题只 ...

  8. HTML设置固定页脚飘浮

    Css /* 页脚 */.footSty{bottom: 0pt; margin: 0pt; position: fixed; width: 100%; z-index: 10 ! important ...

  9. 无软驱加载raid驱动安装windows2003及其他微软操作系统

    [转载]http://blog.zol.com.cn/2650/article_2649199.html [另一篇]http://www.blue1000.com/bkhtml/c159/2013-0 ...

  10. PageMapAdapter MapAdapter (续webServices)

    public class PageMapAdapter extends XmlAdapter<PageMapConverter, IPage<Map<String, Object&g ...