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 ...
随机推荐
- 【jQuery】 常用函数
[jQuery] 常用函数 html() : 获取设置元素内的 html,包含标签 text() : 获取设置元素内的文本, 不包含标签 val() : 获取设置 value 值 attr() : 获 ...
- 【多校联合】(HDU6045)Is Derek lying?
分析 之前没有想到题目解法,看了题解才会,记录一下思考过程. 这条题目的实质是,在满足合法的情况下,有没有a和d的可行解?也就是说,不要仅仅附在表面的思考逻辑条件,而是要思考实际的数学表达. 转化为数 ...
- Qt Qwdget 汽车仪表知识点拆解8 淡入效果
先贴上效果图,注意,没有写逻辑,都是乱动的 看下面的开始,开始的时候有一个带入的效果,这里有一个坑, 网上大部分都是调用下面这个函数 setWindowOpacity(); 但是,你会发现,在你的子窗 ...
- Qt_C++交换两个数
在编程过程中,交换两个数是我用常用的 ,这里做下简单的搬运 bool Widget::swap(int a, int b) { int temp =a; a= b; b = temp; } 这种方式其 ...
- QC的使用学习(二)
今日学习清单: 1.Quality Center中左上角选项中(QC 10.0中文版)工具菜单下的自定义中的几个内容,有:用户属性.组.项目用户.模块访问.需求类型.项目列表等.用户属性打开后是对当 ...
- hdu5863 cjj's string game
矩阵快速幂 #include<bits/stdc++.h> using namespace std; const int INF = 0x3f3f3f3f; const int MOD = ...
- HDU 4436 str2int(后缀自动机)(2012 Asia Tianjin Regional Contest)
Problem Description In this problem, you are given several strings that contain only digits from '0' ...
- C++内置类型如何存放于计算机内存中
摘要:内置类型的机器实现.字/字节/比特.内存 一.概念 计算机以比特序列存储数据,每个比特非0即1,如:00011011011100010110010000111011... 二.计算机以块来处理内 ...
- 使用github同步网站
今天刚刚完成了自己的一个小项目,想把他上传到服务器上,想到到我使用的Visual Stdio Code具有git功能,于是想到使用github作为代码仓库来同步代码. 大体步骤分为这几步:创建远程代码 ...
- 软工实践Beta冲刺(3/7)
队名:起床一起肝活队 组长博客:博客链接 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过去两天完成了哪些任务 描述: 1.界面的修改与完善 展示GitHub当日代码/文档签入记 ...