新人求助,降雨量那题本机AC提交WAWAWA……

原题:

我们常常会说这样的话:“X年是自Y年以来降雨量最多的”。它的含义是X年的降雨量不超过Y年,且对于任意
Y<Z<X,Z年的降雨量严格小于X年。例如2002,2003,2004和2005年的降雨量分别为4920,5901,2832和3890,
则可以说“2005年是自2003年以来最多的”,但不能说“2005年是自2002年以来最多的”由于有些年份的降雨量未
知,有的说法是可能正确也可以不正确的。

1<=n<=50000, 1<=m<=10000, -10^9<=yi<=10^9, 1<=ri<=10^9

以前的博客说这题没啥思维难度,难就难在细节讨论

这次写信心爆棚认为老子现在问题处理地多棒,只需转化某些要点的表达方式就可以避免讨论

然后……

行吧,这次是我被练了

代码:

 #include<iostream>
#include<cstdio>
using namespace std;
const int oo=;
int n,a[],b[],m;
int v[]; bool u[];
void gtsgmttr(int x,int l,int r){
if(l==r){
v[x]=b[l],u[x]=false;
return ;
}
int md=(l+r)>>;
gtsgmttr(x<<,l,md),gtsgmttr(x<<|,md+,r);
v[x]=max(v[x<<],v[x<<|]);
u[x]=(u[x<<]|u[x<<|]|(a[md]+!=a[md+]));
}
int qrv(int x,int l,int r,int ql,int qr){
if(l==ql && r==qr) return v[x];
int md=(l+r)>>;
if(ql<=md && qr>md)
return max(qrv(x<<,l,md,ql,md),qrv(x<<|,md+,r,md+,qr));
else if(qr<=md) return qrv(x<<,l,md,ql,qr);
else return qrv(x<<|,md+,r,ql,qr);
}
bool qru(int x,int l,int r,int ql,int qr){
if(l==ql && r==qr) return u[x];
int md=(l+r)>>;
if(ql<=md && qr>md)
return (qru(x<<,l,md,ql,md)|qru(x<<|,md+,r,md+,qr)|(a[md]+!=a[md+]));
else if(qr<=md) return qru(x<<,l,md,ql,qr);
else return qru(x<<|,md+,r,ql,qr);
}
int bnrsch(int x){ //如果找不到默认输出左侧的
int l=,r=n,md;
//int l=1,r=n,md;
//如果l初值为1,则若左端点小于最小值,那么实际返回的是右侧的
while(l+<r){
md=(l+r)>>;
(a[md]<x ? l : r)=md;
}
//return (a[l]!=x && a[r]!=x ? -1 : (a[l]==x ? l : r));
return a[r]==x ? r : l;
}
int main(){
freopen("ddd.in","r",stdin);
cin>>n;
for(int i=;i<=n;++i) scanf("%d%d",&a[i],&b[i]);
gtsgmttr(,,n);
cin>>m;
int l,r,x,y;
while(m --> ){
scanf("%d%d",&x,&y);
l=bnrsch(x),r=bnrsch(y);
if(x>=y+) printf("false\n");
//else if(a[r]!=y || a[l]!=x) printf("maybe\n");
if(a[l]!=x && a[r]!=y) printf("maybe\n");
else if(a[l]!=x || a[r]!=y){
//注意如果两个端点只知道一个也是能判必错的
int tmp=(l+<=r-(a[r]==y) ? qrv(,,n,l+,r-(a[r]==y)) : );
if(a[l]!=x ? b[r]<=tmp : b[l]<=tmp) printf("false\n");
else printf("maybe\n");
}
else if(b[r]>b[l]) printf("false\n");
else{
int tmp=(l+<=r- ? qrv(,,n,l+,r-) : );
if(b[r]<=tmp) printf("false\n");
else if(qru(,,n,l,r)) printf("maybe\n");
else printf("true\n");
}
}
return ;
}

【SCOI2007】降雨量的更多相关文章

  1. [BZOJ1067][SCOI2007]降雨量

    [BZOJ1067][SCOI2007]降雨量 试题描述 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意 Y<Z<X,Z年的降雨量严格 ...

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

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

  3. 1067: [SCOI2007]降雨量

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

  4. 【BZOJ1067】[SCOI2007]降雨量 RMQ+特判

    [BZOJ1067][SCOI2007]降雨量 Description 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年 ...

  5. bzoj 1067: [SCOI2007]降雨量

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

  6. 【线段树 细节题】bzoj1067: [SCOI2007]降雨量

    主要还是细节分析:线段树作为工具 Description 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小 ...

  7. BZOJ_1067_[SCOI2007]降雨量_ST表

    BZOJ_1067_[SCOI2007]降雨量_ST表 Description 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意 Y<Z< ...

  8. BZOJ1067 [SCOI2007]降雨量 RMQ???

    求救!!!神犇帮我瞅瞅呗...未完...调了2个半小时线段树,没调出来,大家帮帮我啊!!! 小詹用st表写. 我的思路就是把中间空着的年份设为无限,然后一点点特判就行了...然而没出来... [SCO ...

  9. 【BZOJ】1067: [SCOI2007]降雨量(rmq+变态题)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1067 好不爽,弄了一个晚上. 好不爽. 还是照着别人程序拍着看的!!! 噗 这题很变态. 首先,我没 ...

  10. 1067: [SCOI2007]降雨量 - BZOJ

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

随机推荐

  1. JS实现使用Math.random()函数生成n到m间的随机数字

    Math.random()函数返回0和1之间的伪随机数,可能为0,但总是小于1,[0,1) 生成n-m,包含n但不包含m的整数: 第一步算出 m-n的值,假设等于w 第二步Math.random()w ...

  2. 设置主机防火墙规则(iptables规则设置及其与firewalld的生死纠葛)

    一.什么是firewalld防火墙? firewalld防火墙在Linux主机里其实就是一道隔离工具,它只对进出主机的请求做判断处理.也就是说它只管进出,至于你进来后做了什么,就不在firewalld ...

  3. AutoMapper扩展帮助类

    /// <summary> /// AutoMapper扩展帮助类 /// </summary> public static class AutoMapperExtension ...

  4. mysql学习之join从句

    一.join从句共有5种类型 内连接(inner join) 全外连接(full outer join) 左外连接(left outer join) 右外连接(right outer join) 交叉 ...

  5. 【leetcode算法-简单】53. 最大子序和

    [题目描述] 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释:  ...

  6. 乐字节Java反射之二:实例化对象、接口与父类、修饰符和属性

    大家好,小乐继续接着上集:乐字节Java反射之一:反射概念与获取反射源头Class 这次是之二:实例化对象.接口与父类.修饰符和属性 一:实例化对象 之前我们讲解过创建对象的方式,有new .克隆.反 ...

  7. Shuffle 机制

    1. 概述 Map 方法之后,Reduce 方法之前的数据处理过程称之为 Shuffle. 2. Partition 分区 需求:要求将统计结果按照条件输出到不同文件中(分区).比如:将统计结果按照手 ...

  8. 基于nginx与zookeeper的API Gateway实现笔记 - 环境搭建

    为了简化操作,采用操作系统为CentOS 8. 首先需要编译出libzookeeper,在官网下载最新的zookeeper源码,或者github上clone一个,地址为:https://github. ...

  9. 用SQL语句从电脑导入图片到数据库

    --创建图片表 CREATE TABLE W_PIC ( ID INT, --编号 WPATH ), --完整路径 PIC ), --图片名称,不带后缀 img image --图片内容 ) --图片 ...

  10. 部门innercode刷新

    最近遇到一个小需求,就是刷新部门的innercode.在导入数据的时候,innercode乱了,所以需要刷新.那先说说innercode是什么吧. 大家都知道部门是一个树形结构,但是有时候想知道一个部 ...