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

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

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

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

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

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

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

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

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

/**************************************************************
Problem:
User: BLADEVIL
Language: Pascal
Result: Accepted
Time: ms
Memory: kb
****************************************************************/ //By BLADEVIL
type
rec =record
left, right :longint;
max :longint;
flag, flag2 :boolean;
pred, succ :longint;
end; var
n, m :longint;
a, b :array[..] of longint;
t :array[..] of rec; function getmax(a,b:longint):longint;
begin
if a>b then exit(a) else exit(b);
end; function combine(a,b:rec):rec;
begin
with combine do
begin
max:=getmax(a.max,b.max);
pred:=a.pred;
succ:=b.succ;
if a.succ=b.pred- then flag:=true else flag:=false;
flag:=flag and a.flag and b.flag; if a.max=b.max then flag2:=false else flag2:=true;
if max=a.max then flag2:=flag2 and a.flag2;
if max=b.max then flag2:=flag2 and b.flag2;
left:=a.left;
right:=b.right;
end;
end; procedure build(x,l,r:longint);
var
mid :longint;
begin
t[x].left:=l; t[x].right:=r;
if l=r then
begin
with t[x] do
begin
pred:=a[l];
succ:=a[l];
flag2:=true;
max:=b[l];
flag:=true;
end;
exit;
end;
with t[x] do mid:=(left+right)>>;
build(x<<,l,mid); build(x<<+,mid+,r);
t[x]:=combine(t[x<<],t[x<<+]);
end; procedure init;
var
i :longint;
begin
read(n);
for i:= to n do read(a[i],b[i]);
a[]:=-;
build(,,n);
end; function getadress(x:longint):longint;
var
l, r, mid :longint;
ans :longint;
begin
l:=; r:=n;
ans:=;
while l<=r do
begin
mid:=(l+r)>>;
if a[mid]<=x then
begin
ans:=mid;
l:=mid+;
end else r:=mid-;
end;
exit(ans);
end; function ask(x,l,r:longint):rec;
var
mid :longint;
begin
if (t[x].left=l) and (t[x].right=r) then
exit(t[x]);
with t[x] do mid:=(left+right)>>;
if mid<l then exit(ask(x<<+,l,r)) else
if mid>=r then exit(ask(x<<,l,r)) else
exit(combine(ask(x<<,l,mid),ask(x<<+,mid+,r)));
end; procedure main;
var
i :longint;
x, y :longint;
u, v :longint;
query :rec; begin
read(m);
for i:= to m do
begin
read(x,y);
if x>y then
begin
writeln('false');
continue;
end;
if x=y then
begin
writeln('true');
continue;
end;
u:=getadress(x);
v:=getadress(y);
if (a[u]=x) and (a[v]=y) then
begin
if b[v]>b[u] then
begin
writeln('false');
continue;
end;
query:=ask(,u+,v);
if not query.flag2 then
begin
writeln('false');
continue;
end;
if query.max<>b[v] then
begin
writeln('false');
continue;
end;
query:=ask(,u,v);
if not query.flag then
begin
writeln('maybe');
continue;
end else
begin
writeln('true');
continue;
end;
end else
if (a[u]<>x) and (a[v]<>y) then
begin
writeln('maybe');
continue;
end else
if (a[u]=x) and (a[v]<>y) then
begin
if u=v then
begin
writeln('maybe');
continue;
end;
query:=ask(,u+,v);
if query.max>=b[u] then
begin
writeln('false');
continue;
end else
begin
writeln('maybe');
continue;
end;
end else
if (a[u]<>x) and (a[v]=y) then
begin
if u=v then
begin
writeln('maybe');
continue;
end;
query:=ask(,u+,v);
if not query.flag2 then
begin
writeln('false');
continue;
end;
if query.max<>b[v] then
begin
writeln('false');
continue;
end else
begin
writeln('maybe');
continue;
end;
end;
end;
end; begin
init;
main;
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. 云计算之路-阿里云上:原来“黑色0.1秒”发生在socket读取数据时

    在昨天的博文(云计算之路-阿里云上:读取缓存时的“黑色0.1秒”)中我们犯了一个很低级的错误——把13ms算成了130ms(感谢陈硕发现这个错误!),从而对问题的原因作出了错误的推断,望大家谅解! 从 ...

  2. 「暑期训练」「Brute Force」 Far Relative’s Problem (CFR343D2B)

    题意 之后补 分析 我哭了,强行增加自己的思考复杂度...明明一道尬写的题- -(往区间贪心方向想了 其实完全没必要,注意到只有366天,直接穷举判断即可. 代码 #include <bits/ ...

  3. 「日常训练」Alena And The Heater (CFR466D2D)

    题意(Codeforces 940D) 根据给定要求构建数列,求能构建出相同数列的l和r. 分析 这题写的是真的烦.一定要想到对b串要按照5个5个的看!为什么5个5个的看?因为根据题意,是先看前4个再 ...

  4. BZOJ 1968 [Ahoi2005]COMMON 约数研究:数学【思维题】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1968 题意: 设f(x) = x约数的个数.如:12的约数有1,2,3,4,6,12,所以 ...

  5. JMeter Plugins Manager

    JMeter插件管理器官网: https://jmeter-plugins.org/ 把jmeter-plugins-manager-0.16.jar放到C:\JMeter\apache-jmeter ...

  6. JMeter上传图片

    JMeter怎样上传图片? 请注意图片的路径要与.jmx脚本的目录保持一致, 或者放在JMeter的bin目录下. 协议:http 服务器名称或IP:www.abcdef.com 方法:POST 路径 ...

  7. ASP NET Core ---REST & HTTP GET

    参照 草根专栏- ASP.NET Core + Ng6 实战:https://v.qq.com/x/page/h0764n405ll.html 一.REST (Representational Sta ...

  8. 剑指offer-调整数组顺序使奇数位于偶数前面13

    题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. class Solu ...

  9. c#执行插入sql 时,报错:异常信息:超时时间已到。在操作完成之前超时时间已过或服务器未响应

    问题:c#执行插入sql 时,报错:异常信息:超时时间已到.在操作完成之前超时时间已过或服务器未响应 解决: SqlCommand cmd = new SqlCommand(); cmd.Comman ...

  10. BZOJ 2946 POI2000 公共串 后缀自动机(多串最长公共子串)

    题意概述:给出N个字符串,每个串的长度<=2000(雾...可能是当年的年代太久远机子太差了),问这N个字符串的最长公共子串长度为多少.(N<=5) 抛开数据结构,先想想朴素做法. 设计一 ...