| ||||||||||
| 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 | |||||||||
1000MS,我也是醉了,C++和PASCAL差这么远吗const
maxn=200000;
type
rec=record
pos,val:longint;
end;
var
sum,ans:array[1..maxn shl 2] of longint;
person:array[1..maxn] of rec;
n,i:longint;
procedure update(i,l,r,pos,val:longint);
var
mid:longint;
begin
if l=r then
begin
ans[i]:=val;
dec(sum[i]);
exit;
end;
mid:=(l+r) div 2;
if pos<=sum[i*2] then update(i*2,l,mid,pos,val)
else update(i*2+1,mid+1,r,pos-sum[i*2],val);
sum[i]:=sum[i*2]+sum[i*2+1];
end;
procedure buildtree(i,l,r:longint);
var
mid:longint;
begin
sum[i]:=r-l+1;
if l=r then exit;
mid:=(l+r) div 2;
buildtree(i*2,l,mid);
buildtree(i*2+1,mid+1,r);
end;
procedure print(i,l,r:longint);
var
mid:longint;
begin
if l=r then begin write(ans[i],' '); exit; end;
mid:=(l+r) div 2;
print(i*2,l,mid);
print(i*2+1,mid+1,r);
end;
begin
while not eof do
begin
readln(n);
if n=0 then break;
for i:=1 to n do readln(person[i].pos,person[i].val);
buildtree(1,1,n);
for i:=n downto 1 do update(1,1,n,person[i].pos+1,person[i].val);
print(1,1,n);
writeln;
end;
end.
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator