这道题的大题思路就是模拟

  假设给定的年份是x,y,首先分为4个大的情况,分别是

  x的信息已知,y的信息已知

  x的信息已知,y的信息未知

  x的信息未知,y的情况已知

  x的信息未知,y的情况未知

  然后对于每一种情况可以根据x到y区间是否存在空位,最大值是否唯一,以及x,y,区间最大值的关系来判定。

  所以对于区间的问题的合并与处理我们用线段树来存就行了。

  反思:开始对情况的优先级判断不清,没有整理好思路就开始写。最后发现线段树的合并函数写错了。

  1. /**************************************************************
  2. Problem:
  3. User: BLADEVIL
  4. Language: Pascal
  5. Result: Accepted
  6. Time: ms
  7. Memory: kb
  8. ****************************************************************/
  9.  
  10. //By BLADEVIL
  11. type
  12. rec =record
  13. left, right :longint;
  14. max :longint;
  15. flag, flag2 :boolean;
  16. pred, succ :longint;
  17. end;
  18.  
  19. var
  20. n, m :longint;
  21. a, b :array[..] of longint;
  22. t :array[..] of rec;
  23.  
  24. function getmax(a,b:longint):longint;
  25. begin
  26. if a>b then exit(a) else exit(b);
  27. end;
  28.  
  29. function combine(a,b:rec):rec;
  30. begin
  31. with combine do
  32. begin
  33. max:=getmax(a.max,b.max);
  34. pred:=a.pred;
  35. succ:=b.succ;
  36. if a.succ=b.pred- then flag:=true else flag:=false;
  37. flag:=flag and a.flag and b.flag;
  38.  
  39. if a.max=b.max then flag2:=false else flag2:=true;
  40. if max=a.max then flag2:=flag2 and a.flag2;
  41. if max=b.max then flag2:=flag2 and b.flag2;
  42. left:=a.left;
  43. right:=b.right;
  44. end;
  45. end;
  46.  
  47. procedure build(x,l,r:longint);
  48. var
  49. mid :longint;
  50. begin
  51. t[x].left:=l; t[x].right:=r;
  52. if l=r then
  53. begin
  54. with t[x] do
  55. begin
  56. pred:=a[l];
  57. succ:=a[l];
  58. flag2:=true;
  59. max:=b[l];
  60. flag:=true;
  61. end;
  62. exit;
  63. end;
  64. with t[x] do mid:=(left+right)>>;
  65. build(x<<,l,mid); build(x<<+,mid+,r);
  66. t[x]:=combine(t[x<<],t[x<<+]);
  67. end;
  68.  
  69. procedure init;
  70. var
  71. i :longint;
  72. begin
  73. read(n);
  74. for i:= to n do read(a[i],b[i]);
  75. a[]:=-;
  76. build(,,n);
  77. end;
  78.  
  79. function getadress(x:longint):longint;
  80. var
  81. l, r, mid :longint;
  82. ans :longint;
  83. begin
  84. l:=; r:=n;
  85. ans:=;
  86. while l<=r do
  87. begin
  88. mid:=(l+r)>>;
  89. if a[mid]<=x then
  90. begin
  91. ans:=mid;
  92. l:=mid+;
  93. end else r:=mid-;
  94. end;
  95. exit(ans);
  96. end;
  97.  
  98. function ask(x,l,r:longint):rec;
  99. var
  100. mid :longint;
  101. begin
  102. if (t[x].left=l) and (t[x].right=r) then
  103. exit(t[x]);
  104. with t[x] do mid:=(left+right)>>;
  105. if mid<l then exit(ask(x<<+,l,r)) else
  106. if mid>=r then exit(ask(x<<,l,r)) else
  107. exit(combine(ask(x<<,l,mid),ask(x<<+,mid+,r)));
  108. end;
  109.  
  110. procedure main;
  111. var
  112. i :longint;
  113. x, y :longint;
  114. u, v :longint;
  115. query :rec;
  116.  
  117. begin
  118. read(m);
  119. for i:= to m do
  120. begin
  121. read(x,y);
  122. if x>y then
  123. begin
  124. writeln('false');
  125. continue;
  126. end;
  127. if x=y then
  128. begin
  129. writeln('true');
  130. continue;
  131. end;
  132. u:=getadress(x);
  133. v:=getadress(y);
  134. if (a[u]=x) and (a[v]=y) then
  135. begin
  136. if b[v]>b[u] then
  137. begin
  138. writeln('false');
  139. continue;
  140. end;
  141. query:=ask(,u+,v);
  142. if not query.flag2 then
  143. begin
  144. writeln('false');
  145. continue;
  146. end;
  147. if query.max<>b[v] then
  148. begin
  149. writeln('false');
  150. continue;
  151. end;
  152. query:=ask(,u,v);
  153. if not query.flag then
  154. begin
  155. writeln('maybe');
  156. continue;
  157. end else
  158. begin
  159. writeln('true');
  160. continue;
  161. end;
  162. end else
  163. if (a[u]<>x) and (a[v]<>y) then
  164. begin
  165. writeln('maybe');
  166. continue;
  167. end else
  168. if (a[u]=x) and (a[v]<>y) then
  169. begin
  170. if u=v then
  171. begin
  172. writeln('maybe');
  173. continue;
  174. end;
  175. query:=ask(,u+,v);
  176. if query.max>=b[u] then
  177. begin
  178. writeln('false');
  179. continue;
  180. end else
  181. begin
  182. writeln('maybe');
  183. continue;
  184. end;
  185. end else
  186. if (a[u]<>x) and (a[v]=y) then
  187. begin
  188. if u=v then
  189. begin
  190. writeln('maybe');
  191. continue;
  192. end;
  193. query:=ask(,u+,v);
  194. if not query.flag2 then
  195. begin
  196. writeln('false');
  197. continue;
  198. end;
  199. if query.max<>b[v] then
  200. begin
  201. writeln('false');
  202. continue;
  203. end else
  204. begin
  205. writeln('maybe');
  206. continue;
  207. end;
  208. end;
  209. end;
  210. end;
  211.  
  212. begin
  213. init;
  214. main;
  215. end.

bzoj 1067 特判的更多相关文章

  1. bzoj 1067: [SCOI2007]降雨量

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

  2. BZOJ 1067 降雨量(RMQ-ST+有毒的分类讨论)

    1067: [SCOI2007]降雨量 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 4399  Solved: 1182 [Submit][Stat ...

  3. BZOJ 1067:[SCOI2007]降雨量(RMQ+思维)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1067 题意:…… 思路:首先我们开一个数组记录年份,一个记录降雨量,因为年份是按升序排列的,所以我们 ...

  4. BZOJ 1067 & Interval_Tree

    1067: [SCOI2007]降雨量 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 3099 Solved: 800 Description 我们常常 ...

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

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

  6. BZOJ 1067 降雨量

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

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

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

  8. 降雨量 BZOJ 1067

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

  9. 【BZOJ 1067】 [SCOI2007]降雨量

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

随机推荐

  1. unity3d 摄像机跟随角色时被物体遮挡解决方案

    参考文章:http://www.xuanyusong.com/archives/1991 在看此文章时请先看上面的参考文章 看完以上文章后,你也许会想人家都已经给出所有代码了,你还写个毛啊 别急,现在 ...

  2. dispaly:-webkit-box 布局中的坑

    dispaly:-webkit-box 具体用法 这里大家可以网上查, 这里说下里面的坑 里面的子对象设置-webkit-box-flex: 1 -webkit-box-flex: 2 时:一般两个子 ...

  3. 【廖雪峰老师python教程】——filter/sorted

    filter Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函数依次作用于每个元素,然 ...

  4. jackson 处理空值

    @JsonInclude(value=Include.NON_NULL) public class ResultBean 这样在返回数据的时候, { "code": "s ...

  5. 自动化测试学习之路--java String、StringBuilder

    Java中的String和StringBuilder类: 1.String对象是不可变的.每一个看起来修改了String值的方法,实际上都是创建了全新的String对象.代码示例如下: String ...

  6. 第二十四篇configparser(**)

    configparser模块 config:配置,parser:解析.字面意思理解configparser模块就是配置文件的解析模块. 来看一个好多软件的常见文档格式如下: [DEFAULT] # 标 ...

  7. python 网络篇(计算机网络基础)

                               计算机网络的发展及基础网络概念                    广播 主机之间“一对所有”的通讯模式,网络对其中每一台主机发出的信号都进行无 ...

  8. Pro Git - 笔记2

    Git Basics Getting a Git Repository Initializing a Repository in an Existing Directory For Linux: $ ...

  9. JMS实战——ActiveMQ实现Pub-Sub

    前言 上篇博客<JMS实战--ActiveMQ>介绍了ActiveMQ的安装,并实现了简单的PTP模型.这篇博客我们来看一下Pub-Sub模型,之后来总结一下JMS. 实现 项目结构 其中 ...

  10. jQuery添加、移除、改变class属性

    jQuery中一般有3个关于改变元素class的函数addClass.removeClass.toggleClass addClass描述: 为每个匹配的元素添加指定的样式类名$('div').add ...