BZOJ 1067 降雨量 线段树

传送门

这题也是醉了

估计考点是特判 不是数据结构

考察if和else的运用

主要是考虑几种情况的分类 看代码吧

对了 我写的是线段树 因为我懒 懒得搞ST

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#define N 50000+5
#define M 200000+5
using namespace std;
int year[N],a[N],n;
inline int read()
{
    int x = 0, f = 1; char ch = getchar();
    while (ch < ‘0‘ || ch > ‘9‘) { if (ch == ‘-‘) f = -1; ch = getchar(); }
    while (ch >= ‘0‘ && ch <= ‘9‘) { x = x * 10 + ch - ‘0‘; ch = getchar(); }
    return x * f;
}
struct data
{
    int l,r,mn;
}tr[M];
void build(int k,int l,int r)
{
    tr[k].l=l,tr[k].r=r;
    if(l==r){tr[k].mn=a[l];return;}
    int mid=(l+r)>>1;
    build(k<<1,l,mid);
    build(k<<1|1,mid+1,r);
    tr[k].mn=max(tr[k<<1].mn,tr[k<<1|1].mn);
}
int ask(int k,int s,int t)
{
    if(s>t)return -1;
    int l=tr[k].l,r=tr[k].r;
    if(s==l && t==r)return tr[k].mn;
    int mid=(l+r)>>1;
    if(t<=mid)return ask(k<<1,s,t);
    if(s>mid)return ask(k<<1|1,s,t);
    return max(ask(k<<1,s,mid),ask(k<<1|1,mid+1,t));
}
int main()
{
//  freopen("rains.in", "r", stdin);
//  freopen("rains.out", "w", stdout);
    cin>>n;
    for(int i=1;i<=n;++i)
        year[i]=read(),a[i]=read();
    build(1,1,n);
    /*for(int i=1;i<=n;++i)
    printf("y[%d]=%d  a[%d]=%d\n",i,year[i],i,a[i]);*/
    int q;cin>>q;
    while(q--)
    {
        int A=read(),B=read();
        int l=lower_bound(year+1,year+n+1,A)-year;
        int r=lower_bound(year+1,year+n+1,B)-year;
        if(year[l]==A && year[r]==B)
        {
            if(a[l]<a[r] || ask(1,l+1,r-1) >= a[r])puts("false");
            else if(B-A == r-l)puts("true");
            else puts("maybe");
        }
        else if(year[l]!=A && year[r]!=B)puts("maybe");
        else if(year[r] != B)
        {
            if(ask(1,l+1, r-1) >= a[l])puts("false");
            else puts("maybe");
        }
        else
        {
            if(ask(1,l, r-1) >= a[r])puts("false");
            else puts("maybe");
        }
    }
}

时间: 2024-10-12 23:40:22

BZOJ 1067 降雨量 线段树的相关文章

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

1067: [SCOI2007]降雨量 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 4399  Solved: 1182 [Submit][Status][Discuss] Description 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意 Y<Z<X,Z年的降雨量严格小于X年.例如2002,2003,2004和2005年的降雨量分别为4920,5901,2832和3890, 则可以说

【BZOJ 3476】 线段树===

59  懒惰的奶牛贝西所在的牧场,散落着 N 堆牧草,其中第 i 堆牧草在 ( Xi,Yi ) 的位置,数量有 Ai 个单位.贝西从家移动到某一堆牧草的时候,只能沿坐标轴朝正北.正东.正西.正南这四个方向移动,所以计算贝西和牧草间的距离时,应采用"曼哈顿距离"-- (x,y ) 和 (x ′,y ′) 之间的距离为|x ? x ′ | + |y ? y ′ |.例如贝西的家在 (0.5, 0.3),有一堆牧草在 (3, 2),那么它们之间的距离就是 4.2.贝西懒得走动,她想请你为它寻

bzoj 4627 值域线段树

4627: [BeiJing2016]回转寿司 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 523  Solved: 227[Submit][Status][Discuss] Description 酷爱日料的小Z经常光顾学校东门外的回转寿司店.在这里,一盘盘寿司通过传送带依次呈现在小Z眼前.不同的寿 司带给小Z的味觉感受是不一样的,我们定义小Z对每盘寿司都有一个满意度,例如小Z酷爱三文鱼,他对一盘三文 鱼寿司的满意度为10:小Z觉得金枪鱼没有

bzoj 1095 捉迷藏(线段树)

题外话 最近课程不是很紧,准备按AC率版切bz,争取一天一道题以上.然后我喜闻乐见的发现之前剩下的题基本都是数据结构>_<.蛋疼啊... Description 给定一棵树,每个节点要么是黑色,要么是白色,能执行两个操作:把某一个点取反色,返回距离最远的黑色点对. Solution 这题看起来链分治,边分治都可做,然后搜到了小岛的题解.发现了逼格更高的做法,看了曹钦翔的<数据结构的提炼与压缩>,跪烂了... 这题用到了dfs序的性质,也就是括号序列.. 定义一种对一棵树的括号编码.

BZOJ 1230--lites 开关灯(线段树)

1230: [Usaco2008 Nov]lites 开关灯 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1682  Solved: 876[Submit][Status][Discuss] Description Farmer John尝试通过和奶牛们玩益智玩具来保持他的奶牛们思维敏捷. 其中一个大型玩具是牛栏中的灯. N (2 <= N <= 100,000) 头奶牛中的每一头被连续的编号为1..N, 站在一个彩色的灯下面.刚到傍晚的时候

BZOJ.3585.mex(线段树)

题目链接 考虑\([1,i]\)的\(mex[i]\),显然是单调的 而对于\([l,r]\)与\([l+1,r]\),如果\(nxt[a[l]]>r\),那么\([l+1,r]\)中所有\(>a[l]\)的数显然要改成\(a[l]\) 询问排序,离散化,预处理下nxt[],剩下就是线段树的区间更新.查询了 /* 离散化的时候>=n的全部看做n就好了 查询时是只需查r点的(l之前能更新r的已经更新完了,初始时是[1,r],r点现在就是[l,r]了) 单点即可不需要PushUp(也不好得某

【BZOJ1067】【POJ2637】WorstWeather Ever【SCOI2007】降雨量 线段树+恶心讨论

转载请注明出处谢谢:http://blog.csdn.net/vmurder/article/details/42918883 题意:自己去BZOJ上看. 但是总之询问就是要求 // 它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小于X年 // 左>=右>中 题解:然后首先离散化一下,然后把确定的年加到线段树中,乱搞一下就过了. 但是,,,讨论太恶心了!! 详情参照代码,写得很清晰(不清晰怎么A这道题) 代码: #include <cstdio>

BZOJ 3938 Robot 线段树

题目大意:给定n个点,每个点沿数轴匀速直线运动,多次改变某个点的速度和询问当前离数轴最远的点 标解见http://pan.baidu.com/share/link?shareid=4093182173&uk=2587171485#path=%252F%25E9%259B%2586%25E8%25AE%25AD%25E9%2598%259F%25E4%25BA%2592%25E6%25B5%258B%25202015%2520Round%2520%25231%2520%25E9%25A2%2598

BZOJ 4530 LCT/线段树合并

//By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int N=200050; int n,q,cnt,dfn[N],last[N],tree[N*16],lson[N*16],rson[N*16]; int first[N],next[N],v[N],w[N],tot,root[N],fa[N],deep[N],f[N];