本机AC提交RE……

传送门:QAQQAQ

题意:自己看

思路:据说这道题用RMQ做很快,但这道题线段树是可以的

线段树维护一段区间最左年,最右年,是否有间隙和区间最大值

这道题分类讨论是一大难点,主要分为以下几种情况:

1.AB均不确定,输出maybe

2.A确定B不确定:

  若A是A到B最大的,输出maybe

  否则输出false

3.A不确定B确定:

  若B是lower_bound(A)到B最大的,则输出maybe

  否则输出false

4.A确定B确定

  若B是A+1到B最大的,A是A到B最大的,且之间没有间隙,输出true

  若满足上述条件,但有间隙,则输出maybe

  否则输出false

在代码实现方面,我先是没有考虑“严格小于”这一条件,认为最大值等于B就行了,而没有判断之前有无相等

然后加了一些特判防止自己玄学线段树越界停不下来。。。(最近代码实现能力有待提升啊。。。)

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=; int n;
struct node
{
int ly,ry,max_r,Gap;
}tree[N*];
int rain[N],year[N]; void push_up(node& fa,node ls,node rs)
{
fa.ly=ls.ly;
fa.ry=rs.ry;
fa.max_r=max(ls.max_r,rs.max_r);
fa.Gap=;
if(ls.Gap||rs.Gap) fa.Gap=;
if(ls.ry+<rs.ly) fa.Gap=;
} void build(int x,int l,int r)
{
if(l==r)
{
tree[x].ly=year[l];
tree[x].ry=year[l];
tree[x].max_r=rain[l];
tree[x].Gap=;
return;
}
int mid=(l+r)>>;
build(x+x,l,mid);
build(x+x+,mid+,r);
push_up(tree[x],tree[x+x],tree[x+x+]);
} node query(int x,int l,int r,int L,int R)
{
node ret;
if(L<=l&&R>=r) return tree[x];
int mid=(l+r)>>;
if(mid<L) return query(x+x+,mid+,r,L,R);
if(mid>=R) return query(x+x,l,mid,L,R);
node ls=query(x+x,l,mid,L,R);
node rs=query(x+x+,mid+,r,L,R);
push_up(ret,ls,rs);
return ret;
} int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d%d",&year[i],&rain[i]);
build(,,n);
int q; scanf("%d",&q);
while(q--)
{
int x,y,xx,yy,bl=;
scanf("%d%d",&xx,&yy);
if(yy<xx)
{
puts("false");
continue;
}
if(xx==yy)
{
puts("maybe");
continue;
}
x=lower_bound(year+,year+n+,xx)-year;
y=lower_bound(year+,year+n+,yy)-year;
if(xx!=year[x]&&yy!=year[y]) puts("maybe");
else if(xx!=year[x])
{
if(y==||x==y) puts("maybe");
else
{
node n1=query(,,n,x,y);
node n2=query(,,n,x,y-);
//中间降雨量必须严格小于!
if(n1.max_r==rain[y]&&n2.max_r<rain[y]) puts("maybe");
else puts("false");
}
}
else if(yy!=year[y])
{
if(x==n||x==y-) puts("maybe");
else
{
node n1=query(,,n,x,y-);
node n2=query(,,n,x+,y-);
if(n1.max_r==rain[x]&&n2.max_r<rain[x]) puts("maybe");
else puts("false");
}
}
else
{
if(x+==y)
{
if(rain[x]<rain[y]) puts("false");
else if(year[x]+==year[y]) puts("true");
else puts("maybe");
continue;//之前没写continue啊啊啊。。。
}//特判防止线段树越界
node n1=query(,,n,x,y);
node n2=query(,,n,x+,y);
node n3=query(,,n,x+,y-);
if(n2.max_r==rain[y]&&rain[y]<=rain[x]&&n3.max_r<rain[y])
{
if(n1.Gap) puts("maybe");
else puts("true");
}
else puts("false");
}
}
return ;
}

洛谷P2471——[SCOI2007]降雨量的更多相关文章

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

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

  2. P2471 [SCOI2007]降雨量

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

  3. 洛谷 P2053 [SCOI2007]修车 解题报告

    P2053 [SCOI2007]修车 题目描述 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术 ...

  4. BZOJ1067&P2471 [SCOI2007]降雨量[线段树裸题+细节注意]

    dlntqlwsl 很裸的一道线段树题,被硬生生刷成了紫题..可能因为细节问题吧,我也栽了一次WA50分.不过这个隐藏条件真的对本菜鸡来说不易发现啊. 未知的年份连续的就看成一个就好了,把年份都离散化 ...

  5. 洛谷P2470 [SCOI2007]压缩(区间dp)

    题意 题目链接 Sol 神仙题Orz 考虑区间dp,如果我们只设\(f[l][r]\)表示\(s_{lr}\)被压缩的最小长度,而不去关心内部\(M\)分布的话,可能在转移的时候转移出非法状态 因此考 ...

  6. 洛谷P4165 [SCOI2007]组队(排序 堆)

    题意 题目链接 Sol 跟我一起大喊:n方过百万,暴力踩标算! 一个很显然的思路是枚举\(H, S\)的最小值算,复杂度\(O(n^3)\) 我们可以把式子整理一下,变成 \[A H_i + B S_ ...

  7. 洛谷 P2053 [SCOI2007]修车(最小费用最大流)

    题解 最小费用最大流 n和m是反着的 首先, \[ ans = \sum{cost[i][j]}*k \] 其中,\(k\)为它在当前技术人员那里,排倒数第\(k\)个修 我们可以对于每个技术人员进行 ...

  8. 洛谷 P2053 [SCOI2007]修车

    题目描述 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序,使得顾客平均等待 ...

  9. 洛谷P2472 [SCOI2007]蜥蜴 题解

    题目链接: https://www.luogu.org/problemnew/show/P2472 分析: 这道题用最大流解决. 首先构建模型. 一根柱子可以跳入和跳出,于是拆成两个点:入点和出点. ...

随机推荐

  1. ARM多核处理器启动过程分析

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/qianlong4526888/article/details/27695173 说明: 该流程图依照 ...

  2. 43个实例xHTML+CSS(DIV+CSS)网页及导航布局

    在中国,很多前端开发初学者都会把xHTML+CSS页面制作说成DIV+CSS,甚至很多人都还不知道xHTML+CSS是什么意思,只知道盲目的追求DIV+CSS,但在国外,是没有DIV+CSS这个概念的 ...

  3. javascript面向对象编程笔记(函数)

    第三章 函数 3.1 什么是函数 一般来说,函数声明通常由以下几部分组成: function子句 函数名称 函数所需参数 函数体 return子句.如果某个函数没有显示的返回值,默认它的返回值为und ...

  4. pytorch clamp 与clamp_区别

    pytorch clamp 与clamp_ ,有下划线的表示修改并付给自身,无下划线的表示需要返回处理后的值,比如: h = k.clamp(min=0) #将结果存入h,k保留原值 k.clamp_ ...

  5. JS函数 函数的作用,可以写一次代码,然后反复地重用这个代码。

    什么是函数 函数的作用,可以写一次代码,然后反复地重用这个代码. 如:我们要完成多组数和的功能. var sum; sum = 3+2; alert(sum); sum=7+8 ; alert(sum ...

  6. cmd命令符

    运行操作 CMD命令:开始->运行->键入cmd或command(在命令行里可以看到系统版本.文件系统版本) CMD命令锦集       1. gpedit.msc-----组策略 2. ...

  7. python2x 安装 psutil

    安装psutil模块: wget https://pypi.python.org/packages/source/p/psutil/psutil-2.0.0.tar.gz --no-check-cer ...

  8. Fence Obstacle Course

    Fence Obstacle Course 有n个区间自下而上有顺序的排列,标号\(1\sim n\),第i个区间记做\([l_i,r_i]\),现在从第n个区间的起点s出发(显然s在\([l_n,r ...

  9. Python: map和reduce

    可以先google一篇论文:MapReduce: SImplified Data Processing on Large Clusters 1. map map()函数接收2个参数:一个是函数,一个是 ...

  10. thinkphp 模板渲染

    模板定义后就可以渲染模板输出,系统也支持直接渲染内容输出,模板赋值必须在模板渲染之前操作. 大理石平台价格表 渲染模板 渲染模板输出最常用的是使用display方法,调用格式: display('[模 ...