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确定

  1 const
  2         maxn=50010;
  3 var
  4         f:array[0..maxn,0..20]of longint;
  5         a,b:array[0..maxn]of longint;
  6         n,m:longint;
  7
  8 function max(x,y:longint):longint;
  9 begin
 10         if x>y then exit(x);
 11         exit(y);
 12 end;
 13
 14 function findl(x:longint):longint;
 15 var
 16         l,r,mid:longint;
 17 begin
 18         l:=1;
 19         r:=n;
 20         while l<>r do
 21           begin
 22             mid:=(l+r)>>1;
 23             if a[mid]>=x then r:=mid
 24             else l:=mid+1;
 25           end;
 26         exit(l);
 27 end;
 28
 29 function findr(x:longint):longint;
 30 var
 31         l,r,mid:longint;
 32 begin
 33         l:=1;
 34         r:=n;
 35         while l<>r do
 36           begin
 37             mid:=(l+r+1)>>1;
 38             if a[mid]<=x then l:=mid
 39             else r:=mid-1;
 40           end;
 41         exit(l);
 42 end;
 43
 44 function ans(l,r:longint):longint;
 45 var
 46         k:longint;
 47 begin
 48         if l>r then exit(0);
 49         k:=0;
 50         while 1<<(k+1)<r-l+1 do
 51           inc(k);
 52         exit(max(f[l,k],f[r-1<<k+1,k]));
 53 end;
 54
 55 procedure init;
 56 var
 57       i,j,k:longint;
 58 begin
 59         read(n);
 60         for i:=1 to n do
 61           begin
 62             read(a[i],b[i]);
 63             f[i,0]:=b[i];
 64           end;
 65         k:=1;
 66         j:=1;
 67         while k<n do
 68           begin
 69             for i:=1 to n-k do
 70               f[i,j]:=max(f[i,j-1],f[i+k,j-1]);
 71             k:=k<<1;
 72             inc(j);
 73           end;
 74 end;
 75
 76 procedure work;
 77 var
 78         i,x,y,l,r:longint;
 79 begin
 80         read(m);
 81         for i:=1 to m do
 82           begin
 83             read(x,y);
 84             l:=findl(x);
 85             r:=findr(y);
 86             if a[l]=x then
 87               if a[r]=y then
 88                 begin
 89                   if ans(l+1,r-1)<b[r] then
 90                     if b[l]>=b[r] then
 91                       if r-l=y-x then writeln('true')
 92                       else writeln('maybe')
 93                     else writeln('false')
 94                   else writeln('false');
 95                 end
 96               else
 97                 begin
 98                   if ans(l+1,r)>=b[l] then writeln('false')
 99                   else writeln('maybe');
100                 end
101             else
102               if a[r]=y then
103                 begin
104                   if ans(l,r-1)<b[r] then writeln('maybe')
105                   else writeln('false');
106                 end
107               else writeln('maybe');
108           end;
109 end;
110
111 begin
112         init;
113         work;
114 end.

View Code

转载于:https://www.cnblogs.com/Randolph87/p/3682119.html

1067: [SCOI2007]降雨量 - BZOJ相关推荐

  1. 1067: [SCOI2007]降雨量

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

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

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

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

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

  4. scoi2007降雨量

    1067: [SCOI2007]降雨量 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 1096  Solved: 241 [Submit][Statu ...

  5. [SCOI2007]降雨量 线段树和区间最值(RMQ)问题

    题目链接P2471 [SCOI2007]降雨量 听说博客观看效果更佳    这道题是比较经典的 RMQRMQRMQ 问题,找到X和Y年间的最值来进行判断真假 , 用线段树维护是比较简单好写的.然而这只 ...

  6. [SCOI2007]降雨量

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

  7. P2471 [SCOI2007]降雨量(线段树)

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

  8. (线段树)洛谷 P2471 [SCOI2007]降雨量

    原题地址 https://www.luogu.com.cn/problem/P2471 解题思路 准备 好像只有我维护了两棵线段树? 先定义一个 rain\textit{rain}rain 数组存放降 ...

  9. BZOJ1067: [SCOI2007]降雨量(线段树)

    题意:传送门 题解:这个题超级繁琐,参考传送门,传送门,我觉得本题的重点在于如何在线段树上加信息,使得中间漏掉的年份得以知道,有两种方法,通过维护区间和,提前建树时将不相邻年份设为0,还有一种方法是加 ...

最新文章

  1. metasploit-smb扫描获取系统信息
  2. 从零开始搭建spring-cloud(3) ----feign
  3. Jasypt 加密-引言
  4. 浏览器差异总结,可以用此判断浏览器版本(转)
  5. 从“嵌入式”到“物联网”有哪些变化?
  6. Linux—shell脚本化工具模板
  7. php只取时间的下士_PHP 获取时间的各种处理方式!
  8. SQL将数字转换成千分号格式
  9. NGUI_2.6.3_系列教程二
  10. 继承中的盲点,成员或者析构函数,成员函数中为什么有时候需要定义,有时候不需要呢,(已解决)...
  11. 豆瓣app签名sig
  12. ubuntu 18.04虚拟机访问Windows磁盘或文件夹
  13. 【计算机网络】路由器与交换机
  14. WebGL unsupported in this browser 谷歌浏览器,edge不支持WebGL
  15. webstorm自定义文件模板
  16. 问题日志-简易css时间轴特效
  17. 3D效果海报怎么制作设计?如何用PS制作出来!
  18. Android 一定要培训吗,安卓开发需要学什么2
  19. 【B站弹幕数据分析】B站独家付费番剧鬼灭之刃的前12集的弹幕数据分析
  20. 爱立信助力银和瓷业打造智慧工厂;埃森哲2021财年全球营业收入达505亿美元;华为发布11大场景化解决方案 | 全球TMT...

热门文章

  1. Hbase API中常用类介绍和使用
  2. asp.net 关于列表问题。点击文章标题,显示文章内容。
  3. Java多线程编程总结
  4. go中NOSQL数据库操作
  5. close和SO_LINGER
  6. spring18-1:采用jdk的动态代理 proxy。
  7. oracle 创建带参数的视图
  8. 【mysql学习-2】
  9. pointer-events属性
  10. 北京智能计算产业研究院成立