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 ...
随机推荐
- SpriteKit游戏开发适配iPad/iPhone6/7/8/Plus及iPhoneX的尺寸及安全区域
未适配前:Ball球超过屏幕的上下方 适配后:Ball球就在屏幕的可视范围内运动了 一.那么如何适配不同的iPhone.iPhoneX及iPad的屏幕尺寸呢? 我们开发一个App的时候, 通常希望 ...
- Tomcat突然用开发工具启动不起来,只报了个红色的警告,没有其他任何异常
碰到这个问题是,是因为我的catalina.bat文件做了配置修改,导致与工具这边的启动设置起了冲突 下面这个是我在Catalina.bat中新增的配置,删掉这个就可以了 set JAVA_OPTS= ...
- Nginx 配置 HTTPS自签名证书
工具: OpenSSL ssl的开源实现,几乎实现了市面上所有的加密 libcrypto: 通用加密库, 任何软件要实现加密功能 链接调用这个库 libssl: TLS/SSL 加密库 openssl ...
- ashx文件和aspx
ashx文件和aspx文件有什么不同? 我们先新建一个ashx文件看看: <%@ WebHandler Language="C#" Class="Handler&q ...
- 【转】C#获取当前路径7种方法
webformvar s = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName; //C盘 IIS路径 var s1 ...
- 【题解】POI2014FAR-FarmCraft
这题首先手玩一下一下数据,写出每个节点修建软件所需要的时间和到达它的时间戳(第一次到达它的时间),不难发现实际上就是要最小化这两者之和.然后就想到:一棵子树内,时间戳必然是连续的一段区间,而如果将访问 ...
- Android 多线程: 完全解析线程池ThreadPool原理&使用
目录 1. 简介 2. 工作原理 2.1 核心参数 线程池中有6个核心参数,具体如下 上述6个参数的配置 决定了 线程池的功能,具体设置时机 = 创建 线程池类对象时 传入 ThreadPoolExe ...
- 【BZOJ 1124】[POI2008] 枪战Maf Tarjan+树dp
#define int long long using namespace std; signed main(){ 这个题一看就是图论题,然后我们观察他的性质,因为一个图论题如果没有什么性质,就是真· ...
- JS格式化时间(支持小程序,兼容IOS)
})-(\d{})-(\d{})T(\d{}):(\d{}):(\d{})/ /** * @function format time * @param val, format * @return {s ...
- BZOJ1001:狼抓兔子(最小割最大流+vector模板)
1001: [BeiJing2006]狼抓兔子 Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨, ...