平衡树模板 bzoj 3224
program t3224;
var
tr:array[-1..1000000,1..2] of int64;
num,fa,size,quan:array[-1..1000000] of int64;
i,n,sz,rt:longint;
x,y:int64;
function judge(a:boolean):longint;
begin
if a then exit(1) else exit(2);
end;
procedure rotate(k:longint);
var
f,ff,lr,szlr,szk,x:longint;
begin
f:=fa[k]; ff:=fa[f];
x:=judge(tr[f,1]=k); lr:=tr[k,3-x];
szlr:=size[lr]; szk:=size[k];
tr[ff,judge(tr[ff,1]=f)]:=k; fa[k]:=ff; size[k]:=size[f];
tr[k,3-x]:=f; fa[f]:=k;
tr[f,x]:=lr; fa[lr]:=f; size[f]:=size[f]-szk+szlr;
end;
procedure splay(k:longint);
var
f,ff,p,g1,g2:longint;
begin
if k=-1 then exit;
p:=k;
while fa[p]<>0 do
begin
f:=fa[p]; ff:=fa[f];
if ff=0 then begin rotate(p); break; end;
g1:=judge(tr[f,1]=p); g2:=judge(tr[ff,1]=f);
if (g1=g2)and(fa[ff]=0) then begin rotate(p); rotate(p); continue; end;
if g1=g2 then begin rotate(f); rotate(p); end;
if g1<>g2 then begin rotate(p); rotate(p); end;
end;
rt:=p;
end;
procedure inse(data:int64);
var
p,f:longint;
begin
p:=rt;
f:=0;
while p<>-1 do
begin
f:=p;
size[f]:=size[f]+1;
if data=num[p] then begin inc(quan[p]); splay(p); exit; end;
if data>num[p]
then begin p:=tr[p,2]; continue; end;
if data<num[p]
then p:=tr[p,1];
end;
inc(sz); num[sz]:=data; quan[sz]:=1; size[sz]:=1;
fa[sz]:=f; tr[sz,1]:=-1; tr[sz,2]:=-1;
if data>num[f] then tr[f,2]:=sz else tr[f,1]:=sz;
splay(sz);
end;
function findrank(data:int64):int64;
var
p:longint;
begin
p:=rt;
while true do
begin
if num[p]>data then p:=tr[p,1];
if num[p]<data then p:=tr[p,2];
if num[p]=data then break;
end;
splay(p);
exit(size[tr[p,1]]+1);
end;
procedure dele(data:int64);
var
p,p1,p2:longint;
begin
p:=rt;
while true do
begin
if num[p]>data then p:=tr[p,1];
if num[p]<data then p:=tr[p,2];
if num[p]=data then break;
end;
splay(p);
if quan[p]>1 then begin dec(quan[p]); dec(size[p]); exit; end;
if quan[p]=1
then begin
p1:=tr[rt,1];
while tr[p1,2]<>-1 do
p1:=tr[p1,2];
p2:=tr[rt,2];
while tr[p2,1]<>-1 do
p2:=tr[p2,1];
splay(p2); splay(p1);
dec(size[rt]);
dec(size[tr[rt,2]]);
tr[tr[rt,2],1]:=-1;
end;
end;
function pre(data:int64):int64;
var
p:longint;
begin
inse(data);
p:=tr[rt,1];
while tr[p,2]<>-1 do
p:=tr[p,2];
dele(data);
exit(num[p]);
end;
function suc(data:int64):int64;
var
p:longint;
begin
inse(data);
p:=tr[rt,2];
while tr[p,1]<>-1 do
p:=tr[p,1];
dele(data);
exit(num[p]);
end;
function finddata(rank:longint):int64;
var
p:longint;
begin
p:=rt;
inc(rank);
while not((size[tr[p,1]]<rank)and(size[tr[p,1]]+quan[p]>=rank)) do
begin
if size[tr[p,1]]>=rank then begin p:=tr[p,1]; continue; end;
if size[tr[p,1]]<rank then begin rank:=rank-size[tr[p,1]]-quan[p]; p:=tr[p,2]; end;
end;
exit(num[p]);
end;
begin
readln(n);
sz:=0;
rt:=-1;
size[0]:=0;
inse(maxlongint*1000);
inse(-maxlongint*1000);
for i:=1 to n do
begin
readln(x,y);
if x=1 then inse(y);
if x=2 then dele(y);
if x=3 then writeln(findrank(y)-1);
if x=4 then writeln(finddata(y));
if x=5 then writeln(pre(y));
if x=6 then writeln(suc(y));
end;
end.
平衡树模板 bzoj 3224的更多相关文章
- 普通平衡树(bzoj 3224)
Description 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个)3. 查询x数的排名(若有多个相同的数 ...
- BZOJ 3224 普通平衡树(Treap模板题)
3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 14301 Solved: 6208 [Submit][ ...
- Luogu 3369 / BZOJ 3224 - 普通平衡树 - [无旋Treap]
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=3224 https://www.luogu.org/problemnew/show/P3 ...
- HDU 4006 The kth great number 优先队列、平衡树模板题(SBT)
The kth great number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Oth ...
- BZOJ 3224 TYVJ 1728 普通平衡树 [Treap树模板]
3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 7390 Solved: 3122 [Submit][S ...
- BZOJ 3224: Tyvj 1728 普通平衡树 or 洛谷 P3369 【模板】普通平衡树-Splay树模板题
3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 22483 Solved: 10130[Submit][S ...
- BZOJ 3224 Tyvj 1728 普通平衡树模板
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=3224 题目大意: 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以 ...
- fhq_treap || BZOJ 3224: Tyvj 1728 普通平衡树 || Luogu P3369 【模板】普通平衡树
题面:[模板]普通平衡树 代码: #include<cstdio> #include<cstring> #include<iostream> #include< ...
- BZOJ 3224 普通平衡树 | 平衡树模板
#include <cstdio> #include <cmath> #include <cstring> #include <algorithm> # ...
随机推荐
- spring 获取 bean
不通过注解或者是配置文件怎么获取spring中定义的bean呢?有几个方法: 1.实现ApplicationContextAware <bean class="com.xxx.Spri ...
- TCP协议总结--停止等待协议,连续ARQ协议,滑动窗口协议
前言:在学习tcp三次握手的过程之中,由于一直无法解释tcpdump命令抓的包中seq和ack的含义,就将tcp协议往深入的了解了一下,了解到了几个协议,做一个小结. 先来看看我的问题: 这是用tcp ...
- android自定义进度圆与定时任务
先看代码:自定进度圆 public class ProgressCircle extends View { private Paint paint; private int strokewidth = ...
- codeforces731C Socks
C. Socks time limit per test 2 seconds memory limit per test 256 megabytes input standard input outp ...
- java基础十[包、Jar存档文件和部署](阅读Head First Java记录)
将Java的class文件生成为可执行的Java应用程序.Java应用程序有三种:完全在本机执行的Jar(例如本机的GUI可执行程序):完全在服务器端远程执行的(例如浏览器来进行存取):介于两者之间的 ...
- step2-------使用myeclipse创建maven java web项目
1.文章内容概述: 在对项目需求进行分析之后,决定使用maven对我的java web项目进行管理,这篇文章记录了使用myeclipse创建maven java web项目的过程. 2.开发环境: j ...
- laravel 表单验证
$this->validate($request, [ 'sn' =>['regex:/^\d{6}$/','required'], 'user' => ['numeric','mi ...
- ios底层网络请求错误码
kCFHostErrorHostNotFound = 1, kCFHostErrorUnknown = 2, // Query the kCFGetAddrInfoFailureKey to get ...
- [jQuery]最新的 3.0 已发布
可以从 https://code.jquery.com/jquery/#jquery-all-1.x 找到历史版本 1.12.4 是支持 IE6 - 8 的最高版本. 下载地址 http://file ...
- vs2013专业版密钥
KCQWK-Q43V3-M3F2T-83VGV-Y6VTX