Description

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

输入仅一行包含一个正整数n,为已知的数据。以下n行每行两个整数yi和ri,为年份和降雨量,按照年份从小到大排列,即yi<yi+1。下一行包含一个正整数m,为询问的次数。以下m行每行包含两个数Y和X,即询问“X年是自Y年以来降雨量最多的。”这句话是必真、必假还是“有可能”。
Output

对于每一个询问,输出true,false或者maybe。
Sample Input
6
2002 4920
2003 5901
2004 2832
2005 3890
2007 5609
2008 3024
5
2002 2005
2003 2005
2002 2007
2003 2007
2005 2008
Sample Output
false
true
false
maybe
false
HINT

100%的数据满足:1<=n<=50000, 1<=m<=10000, -10^9<=yi<=10^9, 1<=ri<=10^9

其实不难,只不过容易漏掉某些情况

用倍增或者线段树求最值

比如说第X年不确定时,第Y年降雨量必须大于中间的降雨量

直接分四种大情况,然后讨论,就很清晰了

1.X,Y都确定

2.X,Y都不确定

3.X确定,Y不确定

4.X不确定,Y确定

 const
maxn=;
var
f:array[..maxn,..]of longint;
a,b:array[..maxn]of longint;
n,m:longint; function max(x,y:longint):longint;
begin
if x>y then exit(x);
exit(y);
end; function findl(x:longint):longint;
var
l,r,mid:longint;
begin
l:=;
r:=n;
while l<>r do
begin
mid:=(l+r)>>;
if a[mid]>=x then r:=mid
else l:=mid+;
end;
exit(l);
end; function findr(x:longint):longint;
var
l,r,mid:longint;
begin
l:=;
r:=n;
while l<>r do
begin
mid:=(l+r+)>>;
if a[mid]<=x then l:=mid
else r:=mid-;
end;
exit(l);
end; function ans(l,r:longint):longint;
var
k:longint;
begin
if l>r then exit();
k:=;
while <<(k+)<r-l+ do
inc(k);
exit(max(f[l,k],f[r-<<k+,k]));
end; procedure init;
var
i,j,k:longint;
begin
read(n);
for i:= to n do
begin
read(a[i],b[i]);
f[i,]:=b[i];
end;
k:=;
j:=;
while k<n do
begin
for i:= to n-k do
f[i,j]:=max(f[i,j-],f[i+k,j-]);
k:=k<<;
inc(j);
end;
end; procedure work;
var
i,x,y,l,r:longint;
begin
read(m);
for i:= to m do
begin
read(x,y);
l:=findl(x);
r:=findr(y);
if a[l]=x then
if a[r]=y then
begin
if ans(l+,r-)<b[r] then
if b[l]>=b[r] then
if r-l=y-x then writeln('true')
else writeln('maybe')
else writeln('false')
else writeln('false');
end
else
begin
if ans(l+,r)>=b[l] then writeln('false')
else writeln('maybe');
end
else
if a[r]=y then
begin
if ans(l,r-)<b[r] then writeln('maybe')
else writeln('false');
end
else writeln('maybe');
end;
end; begin
init;
work;
end.

1067: [SCOI2007]降雨量 - BZOJ的更多相关文章

  1. bzoj 1067: [SCOI2007]降雨量

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

  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. 【BZOJ】1067: [SCOI2007]降雨量(rmq+变态题)

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

  5. bzoj 1067: [SCOI2007]降雨量 (离散化+线段树)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1067 思路: 毒瘤题,写的自闭,改了一晚上,注意要理清题目的逻辑 x小于等于y,x,y之间的 ...

  6. 洛谷 2471 BZOJ 1067 [SCOI2007]降雨量

    [题解] 用线段树维护区间最大值(因为没有修改,St表也可以),然后由于x,y可能是降雨量未知的年份,需要进行分类讨论. #include<cstdio> #include<algo ...

  7. 1067. [SCOI2007]降雨量【线段树】

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

  8. [BZOJ1067][SCOI2007]降雨量

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

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

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

随机推荐

  1. DOS批处理命令-for语句

    for是为了循环执行一系列命令而执行的命令语句. for要处理的内容不同,语法结构稍有不同.下面就各种情形来分别 1.基本的语法:FOR %変数 IN (set) DO 命令 [参数] 语法内容解析: ...

  2. 图解win7中IIS7.0的安装及配置ASP环境

    控制面板中“程序”的位置 “程序”中“打开或关闭Windows功能”的位置 如图,安装IIS7时需要选择要使用的功能模块 IIS7安装完成之后可以在开始菜单的所有程序中看到“管理工具”,其中有一个“I ...

  3. 怎么手写Ajax实现异步刷新

    所谓的异步刷新,就是不刷新整个网页进行更新数据. 只有通过js才能实现Ajax,进而实行异步刷新 表单提交数据和Ajax提交数据的区别:表单提交是提交的整个页面中的数据,提交数据之后会抛弃之前的页面( ...

  4. dropdownlist值改变时调用js

    DropDownList的OnSelectedIndexChanged方法是服务器端方法如要用需要设置AutoPostBack选项为true,并且在服务器后台写方法 要调用js方法需要onchange ...

  5. angularjs中的directive

    正在初学angularjs中,在网上看到一篇详细讲解directive指令的文章,于是就记录在这里和大家一起分享 angular.module('docsTransclusionExample', [ ...

  6. 去掉影响效率的where 1=1

    最近看了篇文章,觉得挺有道理.实际项目中,我们进行sql条件过滤,我们不能确定是不是有条件.也不能确定条件的个数.大多数人会先把sql语句组装为: 这样,如果有其他过滤条件直接加上“and 其他条件” ...

  7. ASCII 码表

    下面的 ASCII 码表包含数值在0-127之间的字符的十进制.八进制以及十六进制表示. 十进制 八进制 十六进制 字符 描述 0 0 00 NUL   1 1 01 SOH start of hea ...

  8. ARM寄存器的8种寻址方式01

    一.立即数寻址 操作数由指令本身给出 MOV r0,#0x0F //是所有寻址方式里面速度最快的,但是受到合法立即数的限制 立即数要求以#和$开头 十六进制,#后跟0x:十进制,#后直接加:八进制,# ...

  9. Headfirst设计模式的C++实现——观察者模式(Observer)

    WeatherData.h #ifndef WEATHERDATA_H_INCLUDED #define WEATHERDATA_H_INCLUDED #include <set> #in ...

  10. NSTimer定时器类

    NSTimer是Cocoa中比较常用的定时器类,基本操作如下: handleTimer方法可以自行定义.在需要的地方创建timer即可,handleTimer就可以每0.5秒执行一次.   - (vo ...