| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
练习treapprogram pku3481;
type node=record l,r,key,code,prio:longint; end;
var i,root,cnt,p1,p2,p3:longint;
t:array[1..20000000] of node;
procedure rot_l(var x:longint);
var y:longint;
begin
y:=t[x].r;
t[x].r:=t[y].l;
t[y].l:=x;
x:=y;
end;
procedure rot_r(var x:longint);
var y:longint;
begin
y:=t[x].l;
t[x].l:=t[y].r;
t[y].r:=x;
x:=y;
end;
procedure insert(var i:longint; tkey, tcode:longint);
var lt,rt:longint;
begin
if(i=-1)then
begin
inc(cnt); i:=cnt;
t[i].l:=-1; t[i].r:=-1; t[i].key:=tkey; t[i].code:=tcode;
t[i].prio:=random(maxlongint-100*100*10);
exit;
end;
if(t[i].key=tkey)then exit;
lt:=t[i].l; rt:=t[i].r;
if(tkey>t[i].key)then
begin
insert(t[i].r,tkey,tcode);
if(t[rt].prio > t[i].prio)then rot_l(i);
end;
if(tkey<t[i].key)then
begin
insert(t[i].l,tkey,tcode);
if(t[lt].prio > t[i].prio)then rot_r(i);
end;
end;
function findmax(var i:longint):longint;
begin
if(t[i].r <> -1)then exit(findmax(t[i].r));
findmax:=t[i].code;
if(t[i].l <> -1)then i:=t[i].l else i:=-1;
end;
function findmin(var i:longint):longint;
begin
if(t[i].l <> -1)then exit(findmin(t[i].l));
findmin:=t[i].code;
if(t[i].r <> -1)then i:=t[i].r else i:=-1;
end;
begin
randomize;
root:=-1;
cnt:=0;
while(true)do
begin
read(p1);
if(p1=0)then break;
if(p1=1)then
begin
read(p2,p3);
insert(root,p3,p2);
end //end for p1=1
else
begin
if(root=-1)then begin writeln(0); continue; end;
if(p1=2)then writeln(findmax(root));
if(p1=3)then writeln(findmin(root));
end;//end for p1=2/3
end;
end.
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator