本机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. list集合排序2

    java根据List内对象的属性排序 原创 2016年12月07日 00:20:01 标签: java / 对象 / sort / compare 2625 方法一:实现Comparator接口,并重 ...

  2. 整理下webapi的一些琐碎事情

    在使用webapi的时候我们会遇到一些问题比如 1.POST怎么请求 2.怎么兼容JSONP请求 3.怎么给指定端提供跨域的请求 4.怎么显示单独的models层的注释 问题一二其他人都玩的比较成熟的 ...

  3. dubbo重连机制会不会造成错误

    dubbo在调用服务不成功时,默认会重试2次. Dubbo的路由机制,会把超时的请求路由到其他机器上,而不是本机尝试,所以 dubbo的重试机器也能一定程度的保证服务的质量. 但是如果不合理的配置重试 ...

  4. Unable to resolve dependency for ':app@debug/compileClasspath': Could not resolve com.android.support:appcompat-v7:26.1.0

    android studio  3.0 出现此问题可能是因为 你的android studio 时脱机状态 无法下载资源 这时候你可以点击左上角分File->Other Settings-> ...

  5. JS的十大经典算法

    冒泡排序(Bubble Sort) 冒泡排序须知: 作为最简单的排序算法之一,冒泡排序给我的感觉就像Abandon在单词书里出现的感觉一样,每次都在第一页第一位,所以最熟悉...冒泡排序还有一种优化算 ...

  6. day29 面向对象入门

    Python之路,Day17 = Python基础17-面向对象入门 创建类和对象 面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “ ...

  7. dos中文显示乱码怎么办?

    其实只需要一条命令 chcp 65001 执行该操作后,代码页就被变成UTF-8了 也可是GBK,  命令式:  chcp  936 2.修改窗口属性,改变字体 在命令行标题栏上点击右键,选择&quo ...

  8. Git中.gitignore忽略规则

    # 此为注释 – 将被 Git 忽略 *.a # 忽略所有 .a 结尾的文件 !lib.a # 但 lib.a 除外 /TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TO ...

  9. Delphi 窗口置顶的方法

    有几种窗口置顶的方法,简单的有: ShowWindow(窗口句柄,sw_ShowNormal); SetWindowPos(窗口句柄,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOV ...

  10. MyBatis的查询

    MyBatis的查询 在上一个MyBatis的核心API中介绍了SqlSessionFactoryBuilder.SqlSessionFactory以及SqlSession是什么,它们都有什么作用,本 ...