您的位置:首页 > 其它

左偏树模板【pascal】

2016-11-16 21:51 260 查看
var
n,m,x,t,root,size:longint;
i                :longint;
l,r,dis,key      :array[0..1000010] of longint;
procedure swap(var a,b:longint);
var
c:longint;
begin
c:=a;a:=b;b:=c;
end;

function combine(a,b:longint):longint;
begin
if (a=0) or (b=0) then exit(a+b);
if (key[a]>key) then swap(a,b);
r[a]:=combine(r[a],b);
if (dis[l[a]]<dis[r[a]]) then swap(l[a],r[a]);
dis[a]:=dis[r[a]]+1;
exit(a);
end;

begin
read(n);
for i:=1 to n do
begin
read(t);
if (t=1) then
begin
read(x);
inc(size);
key[size]:=x;
root:=combine(root,size);
end else
if (t=2) then writeln(key[root]) else
if (t=3) then root:=combine(l[root],r[root]);
end;
end.
[b]——by Eirlys
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  模板 左偏树