【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】[HNOI2004]宠物收养所 Splay
还是模板题,两颗splay,找点删即可. #include <iostream> #include <cstdio> #include <cstdlib> #def ...
- 【BZOJ-1208】宠物收养所 Splay
1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 6638 Solved: 2601[Submit][Sta ...
- [bzoj1208][HNOI2004]宠物收养所——splay
题目大意 Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发 ...
- [BZOJ1208]宠物收养所(Splay)
Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明的一个特 ...
- BZOJ1208 宠物收养所
Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明的一个特 ...
- HNOI2004宠物收养所(splay维护二叉搜索树模板题)
描述 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发明的一个特殊的公式,得出该领 ...
- Bzoj 1208: [HNOI2004]宠物收养所(splay)
1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec Memory Limit: 162 MB Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收 ...
- BZOJ1208 [HNOI2004]宠物收养所 splay
原文链接http://www.cnblogs.com/zhouzhendong/p/8085803.html 题目传送门 - BZOJ1208 题意概括 有两种数,依次加入. 规则为下: 如果当前剩余 ...
- BZOJ 1208 [HNOI2004]宠物收养所 | SPlay模板题
题目: 洛谷也能评 题解: 记录一下当前树维护是宠物还是人,用Splay维护插入和删除. 对于任何一次询问操作都求一下value的前驱和后继(这里前驱和后继是可以和value相等的),比较哪个差值绝对 ...
- bzoj 1208 宠物收养所--splay
这个题也是单点维护,不管来的是人还是狗,只要num=0就插入,否则就删除. // File Name: ACM/bzoj/1208.cpp // Author: Zlbing // Created T ...
随机推荐
- python 基础网络编程1
python 基础网络编程1 Source code: Lib/socketserver.py lib的主目录下有一个sockserver.py文件, 里面是python基本的网络编程模型 共有一个b ...
- 在hibernate框架中配置显示sql语句
使用Hibernate的框架开发时,可在Hibernate.cfg.xml中加上 <property name="hibernate.show_sql">true< ...
- win10 多桌面 win+tab | ctrl+win+左右箭头
win10 多桌面 win+tab | ctrl+win+左右箭头
- 利用python进行数据分析2_数据采集与操作
txt_filename = './files/python_baidu.txt' # 打开文件 file_obj = open(txt_filename, 'r', encoding='utf-8' ...
- Python字符编码补充
字符编码: Python字符编码贯穿Python学习的始终,现在应用的是Python2中字符编码的问题是很多的. 这次是要彻底解决Python字符编码的问题!!! 1 字符编码的发展过程: 1 .AS ...
- JAVA中IP和整数相互转化(含有掩码的计算)
import java.net.InetAddress;/** * 用于IP和整数之间的相互转换 * @author Andy.Wang * */public class IPv4Util { ...
- Bootstrap历练实例:表单控件状态(焦点)
输入框焦点 当输入框 input 接收到 :focus 时,输入框的轮廓会被移除,同时应用 box-shadow. <!DOCTYPE html><html><head& ...
- ios之UIToolBar
toolbar除了可以和navigationController一起用之外,也可以独立用到view里.工具栏UIToolbar – 一般显示在底部,用于提供一组选项,让用户执行一些功能,而并非用于在完 ...
- Pycharm快捷键及Python常用转义符
不管是windows.xshell或者pycharm,学会使用快捷键都会使学习工作达到事半功倍的效果.这篇博客收集了部分常用的pycharm快捷键,分享给大家,希望对大家有用. 1. 常用快捷键 Py ...
- tkinter学习-文本框
阅读目录 Entry 输入框 Text 文本框 Entry: 说明:输入控件,用于显示简单的文本内容 属性:在输入框中用代码添加和删除内容,同样也是用insert()和delete()方法 from ...