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 ...
随机推荐
- xampp开户,apache打开出现端口被占用提示
刚装上去的时候,可以打开xampp,但是重启的时候出现以后以下问题 13:49:02 [Apache] Error: Apache shutdown unexpectedly.13:49:0 ...
- spark1.6.0伪分布式搭建
环境: hadoop2.6.0 jdk1.8 ubuntu 14.04 64位 1 安装scala环境 版本是scala-2.10.6,官网下载地址http://www.scala-lang.org/ ...
- 关于配置tomcat多版本同eclipse的配置问题
最近很多同学都在反应tomcat和eclipse关联的问题,其他问题网上搜索下大多都有结果,有比较疑难杂症的,下面贴出: 有的同学之前配置过tomcat6的版本或者在此之前做过配置,现在配置tomca ...
- 【转载】Linux升级NTPD服务器-编译安装ntp-4.2.8p12与配置
[转载]Linux升级NTPD服务器-编译安装ntp-4.2.8p12与配置 1. 系统与软件版本 1.1 系统版本 rhel6.4(Red Hat Enterprise Linux Server r ...
- 【bzoj3626】[LNOI2014]LCA 树链剖分+线段树
题目描述 给出一个n个节点的有根树(编号为0到n-1,根节点为0).一个点的深度定义为这个节点到根的距离+1.设dep[i]表示点i的深度,LCA(i,j)表示i与j的最近公共祖先.有q次询问,每次询 ...
- 背景图片移动插件MyFloatingBg(浮动背景图效果,可让背景随着页面的滚动而滚动)
MyFloatingBg这插件可以帮助你在网页上加入可移动背景Background.你可以用于整个文件的背景,或是某几个banner的背景. 它可支持简单的animation效果,你不用去做一个fla ...
- Luogu3960 NOIP2017列队(splay/线段树)
令splay中的一个点表示一段区间,需要使用其中某个点时将区间分裂即可,剩下的都是splay的基本操作了.写的非常丑陋,注意细节.感觉考场上肯定只能靠部分分苟活了.想起来去年因为各种莫名其妙的原因50 ...
- 2017博普杯 东北大学邀请赛(B. Drink too much water)(贪心+树链剖分)
题目地址:https://oj.neu.edu.cn/problem/1204 题目大意: 其实就是树上的线段覆盖, 给出一棵n个结点的树,然后给出树上的一些路径进行覆盖,然后要求选取最少的点,能够把 ...
- 【题解】SDOI2008莎拉公主的困惑
挺有趣的恩:洛谷P2155 在纸上打打草稿,写出n!个数,从先往后,遇到不互质的就筛掉——发现一个奇妙的性质!:筛掉的次数.顺序好像是周期性出现的呢~ 而且更加妙妙的是,好像还是m!一轮..那么因为n ...
- [bzoj] 2038 小Z的袜子(hose) || 莫队
原题 给出一个序列,求给定[l,r]内有任意取两个数,有多大概率是一样的 简单的莫队,每次+-当前区间里有的这个颜色的袜子的个数,最后除以(r-l+1)*(r-l)/2即可. 记得约分. #inclu ...