bzoj 1208 HNOI2004宠物收养所 平衡树
裸平衡树,恢复手感用的
- //By BLADEVIL
- var
- n :longint;
- i :longint;
- x, y :longint;
- t, tot :longint;
- key, s, left, right :array[..] of longint;
- ft :longint;
- a, b :longint;
- ans :longint;
- procedure right_rotate(var t:longint);
- var
- k :longint;
- begin
- k:=left[t];
- left[t]:=right[k];
- right[k]:=t;
- s[k]:=s[t];
- s[t]:=s[left[t]]+s[right[t]]+;
- t:=k;
- end;
- procedure left_rotate(var t:longint);
- var
- k :longint;
- begin
- k:=right[t];
- right[t]:=left[k];
- left[k]:=t;
- s[k]:=s[t];
- s[t]:=s[left[t]]+s[right[t]]+;
- t:=k;
- end;
- procedure maintain(var t:longint;flag:boolean);
- begin
- if not flag then
- if s[left[left[t]]]>s[right[t]] then
- right_rotate(t) else
- if s[right[left[t]]]>s[right[t]] then
- begin
- left_rotate(left[t]);
- right_rotate(t);
- end else exit
- else
- if s[right[right[t]]]>s[left[t]] then
- left_rotate(t) else
- if s[left[right[t]]]>s[left[t]] then
- begin
- right_rotate(right[t]);
- left_rotate(t);
- end else exit;
- maintain(left[t],false);
- maintain(right[t],true);
- maintain(t,true);
- maintain(t,false);
- end;
- procedure insert(var t:longint; v:longint);
- begin
- if t= then
- begin
- inc(tot);
- t:=tot;
- key[t]:=v;
- s[t]:=;
- left[t]:=;
- right[t]:=;
- end else
- begin
- inc(s[t]);
- if v<key[t] then insert(left[t],v) else insert(right[t],v);
- maintain(t,v>=key[t]);
- end;
- end;
- function delete(var t:longint; v:longint):longint;
- begin
- dec(s[t]);
- if (v=key[t]) or (v<key[t]) and (left[t]=) or (v>key[t]) and (right[t]=) then
- begin
- delete:=key[t];
- if (left[t]=) or (right[t]=) then
- t:=left[t]+right[t] else
- key[t]:=delete(left[t],key[t]+);
- end else
- if v<key[t] then delete:=delete(left[t],v) else delete:=delete(right[t],v);
- end;
- function pre(var t:longint; v:longint):longint;
- begin
- if t= then exit(-);
- if v<key[t] then pre:=pre(left[t],v) else
- begin
- pre:=pre(right[t],v);
- if pre=- then pre:=key[t];
- end;
- end;
- function succ(var t:longint; v:longint):longint;
- begin
- if t= then exit(-);
- if key[t]<=v then succ:=succ(right[t],v) else
- begin
- succ:=succ(left[t],v);
- if succ=- then succ:=key[t];
- end;
- end;
- begin
- read(n);
- ans:=;
- t:=; tot:=; s[t]:=;
- for i:= to n do
- begin
- read(x,y);
- if x=ft then insert(t,y) else
- if s[t]= then
- begin
- ft:=x;
- insert(t,y);
- end else
- begin
- a:=pre(t,y); b:=succ(t,y);
- if a=- then a:=-maxlongint div ;
- if b=- then b:=maxlongint div ;
- if abs(b-y)<abs(y-a) then
- begin
- ans:=(ans+abs(b-y)) mod ;
- b:=delete(t,b);
- end else
- begin
- ans:=(ans+abs(y-a)) mod ;
- a:=delete(t,a);
- end;
- end;
- end;
- writeln(ans);
- end.
bzoj 1208 HNOI2004宠物收养所 平衡树的更多相关文章
- BZOJ 1208: [HNOI2004]宠物收养所
1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 7514 Solved: 2982[Submit][Sta ...
- bzoj 1208: [HNOI2004]宠物收养所 set
1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 7328 Solved: 2892[Submit][Sta ...
- BZOJ 1208: [HNOI2004]宠物收养所(BST)
本来想先用set写一遍,再自己写个splay或treap,不过用set过了之后就懒得去写了....以后有空再来写吧..(不会有空的吧= = ------------------------------ ...
- bzoj 1208: [HNOI2004]宠物收养所 (Treap)
链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1208 题面: 1208: [HNOI2004]宠物收养所 Time Limit: 10 ...
- BZOJ 1208: [HNOI2004]宠物收养所 SET的妙用
1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4902 Solved: 1879 题目连接 http:/ ...
- Bzoj 1208: [HNOI2004]宠物收养所(splay)
1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec Memory Limit: 162 MB Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收 ...
- BZOJ 1208 [HNOI2004]宠物收养所:Splay(伸展树)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1208 题意: 有一个宠物收养所,在接下来一段时间内会陆续有一些宠物进到店里,或是一些人来领 ...
- BZOJ 1208 [HNOI2004]宠物收养所 | SPlay模板题
题目: 洛谷也能评 题解: 记录一下当前树维护是宠物还是人,用Splay维护插入和删除. 对于任何一次询问操作都求一下value的前驱和后继(这里前驱和后继是可以和value相等的),比较哪个差值绝对 ...
- 1208: [HNOI2004]宠物收养所
1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 12030 Solved: 4916 Description ...
随机推荐
- 【连载】Bootstrap开发漂亮的前端界面之自定义右键菜单
连载: 1<教你用Bootstrap开发漂亮的前端界面> 2.<Bootstrap开发漂亮的前端界面之实现原理> 网页中的自定义右键菜单越来越普遍,自定义右键菜单可以增强用户体 ...
- Google序列化库FlatBuffers 1.1发布,及与protobuf的比较
个人总结: FlatBuffer相对于Protobuffer来讲,优势如下: 1. 由于省去了编解码的过程,所以从速度上快于Protobuffer,个人测试结果100w次编解码,编码上FlatBuff ...
- 第二十五篇 hashlib模块(* *)
用于加密相关的操作,Python 3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法. 加密复杂程度: SHA1 ...
- Jmeter从文件中读取参数值
1. 通过函数助手,从本地文件中取值选项->函数助手对话框->选择__CSVRead函数->调用参数其中,函数助手对话框中,第一栏填写本地文件所在地址,第二栏写需要入参的值,有点类似 ...
- 深挖 NGUI 基础 之UICamera (二)
一.UI Camera作用 UICamera需要挂载在摄像机上才能发挥作用 UICamera仅负责 发送NGUI 事件 到 脚本所附加的摄像机中看得到的对象,比如我自定义了NGUI层(在Inspect ...
- 12-Mysql数据库----多表查询
本节重点: 多表连接查询 符合条件连接查询 子查询 准备工作:准备两张表,部门表(department).员工表(employee) create table department( id int, ...
- golang交叉编译笔记
GOOS:目标平台的操作系统(darwin.freebsd.linux.windows) GOARCH:目标平台的体系架构(386.amd64.arm) Mac 下编译 Linux 和 Windows ...
- 数据结构与算法之顺序栈C语言实现
顺序栈是一种特殊的顺序表,主要操作是入栈和出栈.将顺序表加一些特定限制,就成了顺序栈. 注: 1.顺序栈C语言实现: 2.按较简单的方式实现,主要帮助理解,可在此基础上修改,更加完善: 3.提供几个简 ...
- tensorflow Importing Data
tf.data API可以建立复杂的输入管道.它可以从分布式文件系统中汇总数据,对每个图像数据施加随机扰动,随机选择图像组成一个批次训练.一个文本模型的管道可能涉及提取原始文本数据的符号,使用查询表将 ...
- 使用ListOperations操作redis
使用ListOperations对象操作redis list: 方法 c参数 s说明 List<V> range(K key, long start, long end); K key ...