1067: [SCOI2007]降雨量
Time Limit: 1 Sec Memory Limit: 162 MB
Submit: 3099 Solved: 800
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

SOL

裸的线段树,在离散化之后对于每个询问x,y我们在x后查询最大值判断位置、值是否相等即可。(我难得地非常...细心地判断了位置...就没有看到一个人跟我这么写传一个struct的...然而我tm就是wa了有什么办法...
对于maybe的判断,我用一个bool判断当年与上一年的信息是否是相连的,在线段树中用&维护与查询即可。(然而我tm就是wa了有什么办法...
对拍了好多次,有许多数据黄学长都是错的...然而他就是a了有什么办法(难道是我对题意的理解有问题QAQ...

code

虽然没有a掉...但我觉得我写得已经很...perfect了...
/*==========================================================================
# Last modified: 2016-02-08 22:15
# Filename: 1067.cpp
# Description:
==========================================================================*/
#define me AcrossTheSky
#include <cstdio>
#include <cmath>
#include <ctime>
#include <string>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm> #include <set>
#include <map>
#include <stack>
#include <queue>
#include <vector>
#define lowbit(x) (x)&(-x)
#define INF 1070000000
#define FOR(i,a,b) for((i)=(a);(i)<=(b);(i)++)
#define FORP(i,a,b) for(int i=(a);i<=(b);i++)
#define FORM(i,a,b) for(int i=(a);i>=(b);i--)
#define ls(a,b) (((a)+(b)) << 1)
#define rs(a,b) (((a)+(b)) >> 1)
#define maxn 500005
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
/*==================split line==================*/
struct Infor{
int maxx,pos;
bool mark;
};
int v[maxn*4];
bool mark[maxn*4];
int pos[maxn*4],rain[maxn],year[maxn];
int L,R;
bool bj[maxn];
map<int,int>M;
void build_tree(int node,int l,int r){
if (l==r){
v[node]=rain[l];
mark[node]=bj[l];
pos[node]=l;
return;
}
int mid=rs(l,r),lc=ls(node,0),rc=lc|1;
build_tree(lc,l,mid); build_tree(rc,mid+1,r);
v[node]=max(v[lc],v[rc]);
if (v[lc]>=v[rc]) pos[node]=pos[lc]; else pos[node]=pos[rc];
mark[node]=mark[lc]&mark[rc];
}
Infor query(int node,int l,int r){
if (L<=l && r<=R){
Infor x;
x.maxx=v[node];
x.mark=mark[node];
x.pos=pos[node];
return x;
}
int mid=rs(l,r),lc=ls(node,0),rc=lc|1;
Infor ans; ans.maxx=-INF; ans.mark=true;
if (L<=mid) ans=query(lc,l,mid);
if (R>mid){
Infor t=query(rc,mid+1,r);
if (t.maxx>ans.maxx) ans.maxx=t.maxx,ans.pos=t.pos,ans.mark&=t.mark;
}
return ans;
}
int main(){
freopen("a.in","r",stdin);
freopen("tmp.out","w",stdout);
int n; cin >> n;
memset(mark,true,sizeof(mark));
memset(bj,true,sizeof(bj));
FORP(i,1,n){
scanf("%d%d",&year[i],&rain[i]);
if (i!=1 && year[i]!=year[i-1]+1) bj[i]=false;
M[year[i]]=i;
}
//FORP(i,1,n) printf("%d ",M[year[i]]);
build_tree(1,1,n);
int m; cin >> m;
FORP(i,1,m){
scanf("%d%d",&L,&R);
L=M[L]; R=M[R];
//if (rain[R]>rain[L]) {printf("false\n"); continue;}
L++;
Infor x=query(1,1,n);
if (x.maxx!=rain[R] || x.pos!=R) {printf("false\n"); continue;}
if (x.maxx==rain[R] && x.pos==R && !x.mark) {
printf("maybe\n"); continue;
}
else printf("true\n");
}
}

BZOJ 1067 & Interval_Tree的更多相关文章

  1. bzoj 1067: [SCOI2007]降雨量

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

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

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

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

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

  4. BZOJ 1067 降雨量

    Description 我们常常会说这样的话:"\(X\)年是自\(Y\)年以来降雨量最多的".它的含义是\(X\)年的降雨量不超过\(Y\)年,且对于任意\(Y<Z< ...

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

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

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

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

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

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

  8. bzoj 1067 分情况讨论

    这道题考察人的严谨,各种情况分类讨论. #include <cstdio> #include <algorithm> #include <map> #define ...

  9. bzoj 1067 特判

    这道题的大题思路就是模拟 假设给定的年份是x,y,首先分为4个大的情况,分别是 x的信息已知,y的信息已知 x的信息已知,y的信息未知 x的信息未知,y的情况已知 x的信息未知,y的情况未知 然后对于 ...

随机推荐

  1. [BZOJ2502]清理雪道

    [BZOJ2502]清理雪道 试题描述 滑雪场坐落在FJ省西北部的若干座山上. 从空中鸟瞰,滑雪场可以看作一个有向无环图,每条弧代表一个斜坡(即雪道),弧的方向代表斜坡下降的方向. 你的团队负责每周定 ...

  2. IDEA 14快捷键

    1.ctrl+alt+左箭头.右箭头:返回到上次浏览的代码处(相当于Eclipse的alt+左右箭头) 编辑类: Ctrl+Space 基本代码实例(类.方法.变量) Ctrl + Shift + S ...

  3. mysql 源码下载列表

    2013年11月16日 14:57:04 http://download.softagency.net/MySQL/Downloads/MySQL-5.5/ http://code.google.co ...

  4. Python多线程(2)——线程同步机制

    本文介绍Python中的线程同步对象,主要涉及 thread 和 threading 模块. threading 模块提供的线程同步原语包括:Lock.RLock.Condition.Event.Se ...

  5. Java for LeetCode 044 Wildcard Matching

    Implement wildcard pattern matching with support for '?' and '*'. '?' Matches any single character. ...

  6. 【python】一个简单的贪婪爬虫

    这个爬虫的作用是,对于一个给定的url,查找页面里面所有的url连接并依次贪婪爬取 主要需要注意的地方: 1.lxml.html.iterlinks()  可以实现对页面所有url的查找 2.获取页面 ...

  7. JavaScript、Jquery选择题

    尚学堂Java EE软件工程师认证考试 试题库-选择题     一.    选择题(包括单选和双选) 1.B 在JavaScript中,以下变量命名非法的是(   )(选择一项) A. numb_1 ...

  8. 当Android工程中提示你找不到头文件,但你已经设置头文件路径了

    虽然在Android.mk文件中,配置了LOCAL_C_INCLUDES路径,但是工程中的红色叉号一直提示找不到头文件 这时,你在工程树目录中展开Includes项,捣鼓捣鼓,重新build下,或许就 ...

  9. SVN常见错误和版本冲突解决

    之前在Eclipse下面误删除了svn的一些插件包,后来重装了就问题重重,在这里还是建议, Windows下SVN最好使用桌面版,在文件管理器下面更新和提交. 1.常见错误整理 #, c-format ...

  10. android 广播

    关于广播以前感觉是一知半解的,这次看到同事整理的文档,顺带跟着再参考几篇博文也学习整理了下,先上个整理的图 代码模板 发送广播 public static final String RECEIVE_A ...