| ||||||||||
| 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 | |||||||||
pascal 水 by yqk 感谢我吧 呵呵哈哈哈或或或或或var
n:longint;
a:array[0..50000,1..3]of longint;
f:array[0..16]of longint;
mi:array[0..50000,0..16,1..2]of longint;
o:array[0..50000,1..3]of longint;
procedure init;
var
i:longint;
begin
f[0]:=1;
for i:=1 to 16 do
f[i]:=f[i-1]*2;
read(n);
for i:=1 to n do
begin
readln(a[i,1],a[i,2]);
a[i,3]:=i;
end;
end;
procedure qsort(l,r:longint);
var
i,j,k:longint;
begin
if l>=r then exit;
i:=l;
j:=r;
k:=a[(l+r) div 2,1];
while i<j do
begin
while a[i,1]<k do inc(i);
while a[j,1]>k do dec(j);
if i<=j then
begin
a[0]:=a[i];
a[i]:=a[j];
a[j]:=a[0];
inc(i);
dec(j);
end;
end;
qsort(l,j);
qsort(i,r);
end;
procedure dfs(l,r:longint);
var
i,t,ft,lt,rt,x:longint;
begin
if r<=l then exit;
t:=trunc(ln(r-l+1)/ln(2));
if mi[l,t,1]<mi[r-f[t]+1,t,1] then x:=mi[l,t,2]
else x:=mi[r-f[t]+1,t,2];
ft:=a[x,3];
lt:=0;
if l<>x then
begin
t:=trunc(ln(x-l)/ln(2));
if mi[l,t,1]<mi[x-f[t],t,1] then lt:=a[mi[l,t,2],3]
else lt:=a[mi[x-f[t],t,2],3];
end;
rt:=0;
if r<>x then
begin
t:=trunc(ln(r-x)/ln(2));
if mi[x+1,t,1]<mi[r-f[t]+1,t,1] then rt:=a[mi[x+1,t,2],3]
else rt:=a[mi[r-f[t]+1,t,2],3];
end;
o[ft,2]:=lt;
o[ft,3]:=rt;
o[lt,1]:=ft;
o[rt,1]:=ft;
dfs(l,x-1);
dfs(x+1,r);
end;
procedure main;
var
i,b,t:longint;
begin
for i:=1 to n do mi[i,0,1]:=a[i,2];
for i:=1 to n do mi[i,0,2]:=i;
for t:=1 to trunc(ln(n)/ln(2)) do
for b:=1 to n-f[t]+1 do
if mi[b,t-1,1]>mi[b+f[t-1],t-1,1] then mi[b,t]:=mi[b+f[t-1],t-1]
else mi[b,t]:=mi[b,t-1];
dfs(1,n);
end;
procedure print;
var
i:longint;
begin
writeln('YES');
for i:=1 to n do
writeln(o[i,1],' ',o[i,2],' ',o[i,3]);
end;
begin
init;
qsort(1,n);
main;
print;
end.
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator