vijos 火烧赤壁

来源:百度知道 编辑:UC知道 时间:2024/05/26 14:22:58
我的程序是这样,哪错了??

var a,b:array[1..200000] of longint;
n,m,i,k,ans:longint;

procedure ll(l,r:longint);
var x,y,i,j:longint;
begin;
i:=l;
j:=r;
x:=a[(l+r) shr 1];
repeat
while a[i]<x do inc(i);
while x<a[i] do dec(j);
if i<=j then begin
y:=a[i]; a[i]:=a[j]; a[j]:=y;
y:=b[i]; b[i]:=b[j]; b[j]:=y;
inc(i);dec(j);
end;
until i>j;
if l<j then ll(l,j);
if i<r then ll(i,r);
end;

begin
readln(n);
for i:=1 to n do read(a[i],b[i]);
ll(1,n);
for i:=1 to n do begin
if b[i]>a[i+1] then a[i+1]:=b[i];
if a[i+1]>b[i+1] then b[i+1]:=a[i+1];
end;
for i:=1 to n do
inc(ans,b[i]-a[i]);
writeln(ans);
end.

var a,b:array[1..200000] of longint;
n,m,i,k,ans:longint;

procedure ll(l,r:longint);
var x,y,i,j:longint;
begin;
i:=l;
j:=r;
x:=a[(l+r) shr 1];
repeat
while a[i]<x do inc(i);
while x<a[i] do dec(j);-----------------
-----------------改为while a[j]>x do dec(j);i与j不要搞错
if i<=j then begin
y:=a[i]; a[i]:=a[j]; a[j]:=y;
y:=b[i]; b[i]:=b[j]; b[j]:=y;
inc(i);dec(j);
end;
until i>j;
if l<j then ll(l,j);
if i<r then ll(i,r);
end;

begin
readln(n);
for i:=1 to n do read(a[i],b[i]);
ll(1,n);
for i:=1 to n do begin
if b[i]>a[i+1] then a[i+1]:=b[i];
if a[i+1]>b[i+1] then b[i+1]:=a[i+1];
end;
for i:=1 to n do
inc(ans,b[i]-a[i]);
writeln(ans);
end.