洛谷P2471——[SCOI2007]降雨量
本机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]降雨量的更多相关文章
- 洛谷P2471 [SCOI2007] 降雨量 [RMQ,模拟]
题目传送门 降雨量 题目背景 07四川省选 题目描述 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小于X ...
- P2471 [SCOI2007]降雨量
Description 我们常常会说这样的话:"X年是自Y年以来降雨量最多的".它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小于X年.例如2 ...
- 洛谷 P2053 [SCOI2007]修车 解题报告
P2053 [SCOI2007]修车 题目描述 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术 ...
- BZOJ1067&P2471 [SCOI2007]降雨量[线段树裸题+细节注意]
dlntqlwsl 很裸的一道线段树题,被硬生生刷成了紫题..可能因为细节问题吧,我也栽了一次WA50分.不过这个隐藏条件真的对本菜鸡来说不易发现啊. 未知的年份连续的就看成一个就好了,把年份都离散化 ...
- 洛谷P2470 [SCOI2007]压缩(区间dp)
题意 题目链接 Sol 神仙题Orz 考虑区间dp,如果我们只设\(f[l][r]\)表示\(s_{lr}\)被压缩的最小长度,而不去关心内部\(M\)分布的话,可能在转移的时候转移出非法状态 因此考 ...
- 洛谷P4165 [SCOI2007]组队(排序 堆)
题意 题目链接 Sol 跟我一起大喊:n方过百万,暴力踩标算! 一个很显然的思路是枚举\(H, S\)的最小值算,复杂度\(O(n^3)\) 我们可以把式子整理一下,变成 \[A H_i + B S_ ...
- 洛谷 P2053 [SCOI2007]修车(最小费用最大流)
题解 最小费用最大流 n和m是反着的 首先, \[ ans = \sum{cost[i][j]}*k \] 其中,\(k\)为它在当前技术人员那里,排倒数第\(k\)个修 我们可以对于每个技术人员进行 ...
- 洛谷 P2053 [SCOI2007]修车
题目描述 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序,使得顾客平均等待 ...
- 洛谷P2472 [SCOI2007]蜥蜴 题解
题目链接: https://www.luogu.org/problemnew/show/P2472 分析: 这道题用最大流解决. 首先构建模型. 一根柱子可以跳入和跳出,于是拆成两个点:入点和出点. ...
随机推荐
- 字符串KMP算法
讲解:http://blog.csdn.net/starstar1992/article/details/54913261 #include <bits/stdc++.h> using n ...
- 【POJ】3660 Cow Contest
题目链接:http://poj.org/problem?id=3660 题意:n头牛比赛,有m场比赛,两两比赛,前面的就是赢家.问你能确认几头牛的名次. 题解:首先介绍个东西,传递闭包,它可以确定尽可 ...
- Docker学习の更改Docker的目录
一.更改虚拟磁盘的目录 虚拟机的默认存储位置是C:\Users\Administrator\.docker\machine\machines ,后期docke镜像文件会不断增加,为了给系统盘减负,最好 ...
- iOS开发系列-Runtime运用场景
概述 Runtime 又叫运行时,是一套底层的 C 语言 API,其为 iOS 内部的核心之一,我们平时编写的 OC 代码,底层都是基于它来实现的. 调用runtimeAPI需要导入都文件#impor ...
- mantis 添加新状态配置方法
在mantis的状态栏中一般只有:新建.反馈.认可.已确认.已分派.已解决.已关闭,七个选项,如果想在其中加入新的状态怎么做? 我要加入的状态为:重新打开 1.添加状态信息 打开config_defa ...
- django 项目分析
项目要点 一.功能制定 1.用户功能 #.登陆 #.权限组功能 2.数据展示功能 #.列表展示 #.详细信息展示 #.图标展示 3.资源管理功能 #远程管理 #对远程服务器上的进程具有 #开启 #关闭 ...
- Redis 常用的数据结构
String 字符串 set get 使用场景: 可以用来作为缓存使用(缓存更新策略和缓存雪崩如何处理) List lpop rpop lpush rpush 使用场景: set 无序集合 使用场景: ...
- hdu多校第一场1003 (hdu6580)Milk 背包
题意: 有一个n*m的矩阵,左右可以随便走,但只能在每一行的中点往下走,每走一格花费时间1. 现在这个矩阵里放了k瓶牛奶,第i个牛奶喝下去需要ti时间 起点是(1,1) 对于每个i∈[1,k],问喝掉 ...
- redis服务后台运行
文章目录 进入redis的安装目录 查看目录结构 进入src目录,普通启动效果 编辑redis服务目录下的redis.conf 进入src目录,执行后台运行的命令 检查服务是否开启 进入redis的安 ...
- Big Number HDU - 1212
As we know, Big Number is always troublesome. But it's really important in our ACM. And today, your ...