【BZOJ1208】宠物收养所(平衡树,splay)
题意:见题面
思路:因为每个时刻要么全是人要么全是宠物,所以可以一棵splay解决
维护单点插入,单点删除,求前驱,求后继即可
var t:array[..,..]of longint;
num,fa:array[..]of longint;
n,cnt,t1,t2,i,root,p,x,y:longint;
ans:int64; procedure rotate(x:longint;var k:longint);
var y,z,l,r:longint;
begin
y:=fa[x]; z:=fa[y];
if t[y,]=x then l:=
else l:=;
r:=-l;
if y=k then k:=x
else
if t[z,]=y then t[z,]:=x
else t[z,]:=x;
fa[x]:=z; fa[y]:=x; fa[t[x,r]]:=y;
t[y,l]:=t[x,r]; t[x,r]:=y;
end; procedure splay(x:longint;var k:longint);
var y,z:longint;
begin
while x<>k do
begin
y:=fa[x]; z:=fa[y];
if y<>k then
begin
if (t[y,]=x)xor(t[z,]=y) then rotate(x,k)
else rotate(y,k);
end;
rotate(x,k);
end;
end; procedure ins(var k:longint;x,last:longint);
begin
if k= then
begin
inc(cnt);
k:=cnt; num[k]:=x;
fa[k]:=last; splay(k,root);
exit;
end;
if x<num[k] then ins(t[k,],x,k)
else ins(t[k,],x,k);
end; procedure del(x:longint);
var k:longint;
begin
splay(x,root);
if t[x,]*t[x,]= then root:=t[x,]+t[x,]
else
begin
k:=t[x,];
while t[k,]> do k:=t[k,];
t[k,]:=t[x,]; fa[t[x,]]:=k;
root:=t[x,];
end;
fa[root]:=;
end; procedure pred(k,x:longint);
begin
if k= then exit;
if num[k]<=x then
begin
t1:=k; pred(t[k,],x);
end
else pred(t[k,],x);
end; procedure succ(k,x:longint);
begin
if k= then exit;
if num[k]>=x then
begin
t2:=k; succ(t[k,],x);
end
else succ(t[k,],x);
end; begin
assign(input,'bzoj1208.in'); reset(input);
assign(output,'bzoj1208.out'); rewrite(output);
readln(n);
for i:= to n do
begin
readln(x,y);
if root= then begin p:=x; ins(root,y,); end
else if p=x then ins(root,y,)
else
begin
t1:=-; t2:=-;
pred(root,y); succ(root,y);
if t1=- then
begin
ans:=ans+num[t2]-y; ans:=ans mod ; del(t2);
end
else if t2=- then
begin
ans:=ans+y-num[t1]; ans:=ans mod ; del(t1);
end
else
if y-num[t1]>num[t2]-y then
begin
ans:=ans+num[t2]-y; ans:=ans mod ; del(t2);
end
else
begin
ans:=ans+y-num[t1]; ans:=ans mod ; del(t1);
end;
end;
end;
writeln(ans);
close(input);
close(output);
end.
【BZOJ1208】宠物收养所(平衡树,splay)的更多相关文章
- [BZOJ1208]宠物收养所(Splay)
Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明的一个特 ...
- [bzoj1208][HNOI2004][宠物收养所] (平衡树)
Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明的一个特 ...
- BZOJ1208 宠物收养所
Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明的一个特 ...
- 【HNOI2004】宠物收养所(splay)
题面 Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明的 ...
- BZOJ 1208 宠物收养所 | 平衡树模板题
BZOJ 1208 宠物收养所 我犯过的错误:删除一个节点后没有update新的根节点,导致size错了! #include <cstdio> #include <cmath> ...
- BZOJ 1208 [HNOI2004]宠物收养所:Splay(伸展树)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1208 题意: 有一个宠物收养所,在接下来一段时间内会陆续有一些宠物进到店里,或是一些人来领 ...
- HYSBZ 1208 宠物收养所 (Splay树)
题意:一家宠物收养所负责处理领养者与遗弃宠物业务,有人来领宠物,则领一只最理想的.若没有宠物了,领养者们就得等到宠物来,宠物一来立刻送给其中一个等待者.如果有两个理想的选择,则选择那个值较小的.收养所 ...
- B1208 [HNOI2004]宠物收养所 平衡树||set (滑稽)
这个题是一道splay裸题,但是我不太会写,所以用set直接水过去!!!哈哈哈哈,美滋滋. set总结: set是一个集合,然后里面没用重复的元素.里面有一些函数: begin() ,返回se ...
- 【BZOJ1208】宠物收养所(splay)
题意:见题面 思路:因为每个时刻要么全是人要么全是宠物,所以可以一棵splay解决 维护单点插入,单点删除,求前驱,求后继即可 ..,..]of longint; num,fa:..]of longi ...
- fjutacm 2492 宠物收养所 : Splay 模板 O(nlogn)
/** problem: http://www.fjutacm.com/Problem.jsp?pid=2492 Splay blog: https://tiger0132.blog.luogu.or ...
随机推荐
- Hadoop内功修炼
IT十八掌<大数据内功修炼系列课程>强势推出!由实战派名师徐培成亲自操刀,学完做不了大数据我们负全责!2015.12.21前,优惠价:4999(名额已不多!)2015.12.31前,优惠价 ...
- FTP地址格式如下:“ftp://用户名:密码@FTP服务器IP”
FTP地址格式如下:“ftp://用户名:密码@FTP服务器IP”
- flash的读写与擦除
对于flash的认识,比较肤浅,在网上找了些资料,感谢 http://blog.csdn.net/lin364812726/article/details/18815395 的博主, 将其博文转载过 ...
- Visual C++2012中CMFCPropertySheet的用法
看到了一个例子(NewControls),该例子中使用了按钮图片等特效(哈哈,个人觉得挺高端),但是仔细看它的工程,没有xxxDlg.cpp就觉得奇诡了,难道不是基于对话框完成的?最终查阅居然是这样的 ...
- appium + maven +jenkins 基本入门之二 新建maven 的java项目
1: 下载maven : 1.0 :设置maven的环境变量: 1.1: 设置maven本地仓库: 在下载好的maven文件夹找到 apache-maven-3.3.9/conf 文件夹下的setti ...
- Android test---JUnit
JUnit 单元测试 Android的单元测试基础也是比较简单,同样还是测试相加方法是否正确,测试用例还是用1+1?=2来个简单的Android单元测试: 1..打开eclipse,新建一个proje ...
- 细说 webpack 之流程篇
摘自: http://taobaofed.org/blog/2016/09/09/webpack-flow/ 引言 目前,几乎所有业务的开发构建都会用到 webpack .的确,作为模块加载和打包神器 ...
- java 获取当月第一天和最后一天 获取前一个月第一天和最后一天
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); //获取前月的第一 ...
- PIC32MZ tutorial -- OC Interrupt
In my previous blog "PIC32MZ tutorial -- Output Compare", I shows how to apply Output Comp ...
- Orcle基本语句(五)
--分页查询---begin --sqlserver top --mysql limit --oracle rownum(伪列),oracle中伪列(rownum,rowid) --查询工资为前五的信 ...