bzoj 1067 特判
这道题的大题思路就是模拟
假设给定的年份是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 特判的更多相关文章
- bzoj 1067: [SCOI2007]降雨量
题目链接: bzoj 1067: [SCOI2007]降雨量 题解: 很简单的一道题,但代码里有许多细节需要注意,切容易出错,调了三个小时OTZ 做一个st表维护区间最大值就 在获得年份在序列中的po ...
- BZOJ 1067 降雨量(RMQ-ST+有毒的分类讨论)
1067: [SCOI2007]降雨量 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 4399 Solved: 1182 [Submit][Stat ...
- BZOJ 1067:[SCOI2007]降雨量(RMQ+思维)
http://www.lydsy.com/JudgeOnline/problem.php?id=1067 题意:…… 思路:首先我们开一个数组记录年份,一个记录降雨量,因为年份是按升序排列的,所以我们 ...
- BZOJ 1067 & Interval_Tree
1067: [SCOI2007]降雨量 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 3099 Solved: 800 Description 我们常常 ...
- bzoj 1067: [SCOI2007]降雨量 模擬
1067: [SCOI2007]降雨量 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2010 Solved: 503[Submit][Status] ...
- BZOJ 1067 降雨量
Description 我们常常会说这样的话:"\(X\)年是自\(Y\)年以来降雨量最多的".它的含义是\(X\)年的降雨量不超过\(Y\)年,且对于任意\(Y<Z< ...
- bzoj 1067: [SCOI2007]降雨量 (离散化+线段树)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1067 思路: 毒瘤题,写的自闭,改了一晚上,注意要理清题目的逻辑 x小于等于y,x,y之间的 ...
- 降雨量 BZOJ 1067
降雨量 [问题描述] 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小于X年.例如2002,2003,20 ...
- 【BZOJ 1067】 [SCOI2007]降雨量
Description 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意Y<Z<X,Z年的降雨量严格小于X年.例如2002,2003,2 ...
随机推荐
- jmeter动态获取jsessionid
思想是在一个线程组内添加一个cookie管理器,登录之后,用正则提取到sessionid,该线程组下的操作便可以共享这个session了. 1. 依次新建线程组.cookie管理器.http请求-登录 ...
- Tensorflow多线程输入数据处理框架
Tensorflow提供了一系列的对图像进行预处理的方法,但是复杂的预处理过程会减慢整个训练过程,所以,为了避免图像的预处理成为训练神经网络效率的瓶颈,Tensorflow提供了多线程处理输入数据的框 ...
- 微信公众号开发java框架:wx4j(KefuUtils篇)
wx4j-KefuUtils介绍 函数说明:添加客服 参数:Kefu对象 返回值:微信服务器响应的json字符串 public String addKefu(Kefu kefu) 函数说明: 参数:K ...
- JVM高级内存优化面试
Sun HotSpot VM,是JDK和Open JDK中自带的虚拟机,也是目前使用范围最广的Java虚拟机. JVM内存分布程序计数器:是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指 ...
- Spring Boot(一)入门篇
SpringBoot概述 Spring Boot的诞生简化了Spring应用开发,SpringBoot提供对Spring容器.第三方插件等很多服务的管理.对于大部分Spring应用,无论是简单的web ...
- 修改虚拟机上Linux系统的IP地址
然后再输入:ifconfig eth0 192.168.11.6 netmask 255.255.255.0 . 这样就可以把网卡eth0的IP地址修改为 192.168.11.6
- (转)MongoDB numa系列问题三:overcommit_memory和zone_reclaim_mode
内核参数overcommit_memory : 它是 内存分配策略 可选值:0.1.2.0:表示内核将检查是否有足够的可用内存供应用进程使用:如果有足够的可用内存,内存申请允许:否则,内存申请失败,并 ...
- TCP的挥手协议和握手协议
三次握手协议:三次握手协议的主要过程是交互彼此之间的初始序列号,如果没有确认的ACK帧可以么?肯定是可以的 client A -------> server B client A 发送了自己的初 ...
- jdbc连接oracle语法
public class LangDemo { public static void main(String[] args) throws Exception{ try { //加载驱动 Class. ...
- oracle补充
索引 索引是若干数据行的关键字的列表,查询数据时,通过索引中的关键字可以快速定位到要访问的记录所在的数据块,从而大大减少读取数据的I/O次数,因此可以显著的提高性能 创建索引的SQL 把下面表中的na ...