直接发了。。
program p1665;
type
sbtnode=record
lsb,rsb,key,s:longint;
end;
intervaltree=record
tot,root,lc,rc:longint;
l,r,m,d:longint;
end;
var
ctree:array[0..150003]of intervaltree;
sbt:array[1..18,0..100002]of sbtnode;
flag:boolean;
a:array[1..50001]of longint;
top:longint;
n,mm,i,ii:longint;
mid,o,v,lll,rrr,l,r,tt,k,max:longint;
ch:char;
////////////////---sbt LR;
procedure lr(p:longint;var t:longint);
var
k:longint;
begin
k:=sbt[p,t].rsb;
sbt[p,t].rsb:=sbt[p,k].lsb;
sbt[p,k].lsb:=t;
sbt[p,k].s:=sbt[p,t].s;
sbt[p,t].s:=sbt[p,sbt[p,t].lsb].s+sbt[p,sbt[p,t].rsb].s+1;
t:=k;
end;
/////////////////---sbt RR;
procedure rr(p:longint;var t:longint);
var
k:longint;
begin
k:=sbt[p,t].lsb;
sbt[p,t].lsb:=sbt[p,k].rsb;
sbt[p,k].rsb:=t;
sbt[p,k].s:=sbt[p,t].s;
sbt[p,t].s:=sbt[p,sbt[p,t].lsb].s+sbt[p,sbt[p,t].rsb].s+1;
t:=k;
end;
/////////////////---sbt Maintain;
procedure maintain(p:longint;var t:longint;ff:boolean);
begin
if ff then
begin
if sbt[p,sbt[p,sbt[p,t].lsb].lsb].s>
sbt[p,sbt[p,t].rsb].s then
rr(p,sbt[p,t].lsb)
else
if sbt[p,sbt[p,sbt[p,t].lsb].rsb].s>
sbt[p,sbt[p,t].rsb].s then
begin
lr(p,sbt[p,t].lsb);
rr(p,t);
program p1665;
type
sbtnode=record
lsb,rsb,key,s:longint;
end;
intervaltree=record
tot,root,lc,rc:longint;
l,r,m,d:longint;
end;
var
ctree:array[0..150003]of intervaltree;
sbt:array[1..18,0..100002]of sbtnode;
flag:boolean;
a:array[1..50001]of longint;
top:longint;
n,mm,i,ii:longint;
mid,o,v,lll,rrr,l,r,tt,k,max:longint;
ch:char;
////////////////---sbt LR;
procedure lr(p:longint;var t:longint);
var
k:longint;
begin
k:=sbt[p,t].rsb;
sbt[p,t].rsb:=sbt[p,k].lsb;
sbt[p,k].lsb:=t;
sbt[p,k].s:=sbt[p,t].s;
sbt[p,t].s:=sbt[p,sbt[p,t].lsb].s+sbt[p,sbt[p,t].rsb].s+1;
t:=k;
end;
/////////////////---sbt RR;
procedure rr(p:longint;var t:longint);
var
k:longint;
begin
k:=sbt[p,t].lsb;
sbt[p,t].lsb:=sbt[p,k].rsb;
sbt[p,k].rsb:=t;
sbt[p,k].s:=sbt[p,t].s;
sbt[p,t].s:=sbt[p,sbt[p,t].lsb].s+sbt[p,sbt[p,t].rsb].s+1;
t:=k;
end;
/////////////////---sbt Maintain;
procedure maintain(p:longint;var t:longint;ff:boolean);
begin
if ff then
begin
if sbt[p,sbt[p,sbt[p,t].lsb].lsb].s>
sbt[p,sbt[p,t].rsb].s then
rr(p,sbt[p,t].lsb)
else
if sbt[p,sbt[p,sbt[p,t].lsb].rsb].s>
sbt[p,sbt[p,t].rsb].s then
begin
lr(p,sbt[p,t].lsb);
rr(p,t);