夏令营编程题:数组排序与算法实现.pdfVIP

  • 0
  • 0
  • 约3.59千字
  • 约 6页
  • 2026-02-06 发布于北京
  • 举报

夏令营编程题:数组排序与算法实现.pdf

typearr=array[0..110000]oflongint;

constmovar

n,i,j,t,now:longint;ans:int64;

a,b,c,d:arr;tr,mark:array[0..910000]of

longint;proceduresort(l,r:longint;var

a,b:arr);vari,j,x,t:longint;begini:=l;j:=

r;x:=b[(l+r)div2];repeatwhilea[b[i]]

a[x]doinc(i);whilea[b[j]]a[x]do

dec(j);ifi=jthenbegint:=b[i];b[i]:=b[

j];b[j]:=t;inc(i);dec(j);end;untilij;if

irthensort(i,r,a,b);ifjlthen

sort(l,j,a,b);end;procedure

make(ro,l,r:longint);var

mid:longint;beginifl=rthenbegintr[

ro]:=l;exit;end;mid:=(l+r)div2;

make(ro*2,l,mid);make(ro*2+1,mid+1,

r);end;procedure

updata(ro,l,r:longint);beginifmark[

ro]0thenbeginifl=rthenbegintr[ro]:

=tr[ro]+mark[ro];mark[ro]:;end

=0

elsebegin

type

arr=array[0..110000]oflongint;

const

mo

var

n,i,j,t,now:longint;ans:int64;

a,b,c,d:arr;

tr,mark:array[0..910000]oflongint;

proceduresort(l,r:longint;vara,b:arr);

var

i,j,x,t:longint;

begin

i:=l;j:=r;x:=b[(l+r)div2];

repeat

whilea[b[i]]a[x]doinc(i);

whilea[b[j]]a[x]dodec(j);

ifi=jthen

begin

t:=b[i];b[i]:=b[j];b[j]:=t;

inc(i);dec(j);

end;

untilij;

ifirthensort(i,r,a,b);

ifjlthensort(l,j,a,b);

end;

proceduremake(ro,l,r:longint);

varmid:longint;

begin

ifl=rthenbegintr[ro]:=l;exit;end;

mid:=(l+r)div2;

make(ro*2,l,mid);

make(ro*2+1,mid+1,r);

end;

procedureupdata(ro,l,r:longint);

begin

ifmark[ro]0then

begin

ifl=rthen

begin

tr[ro]:=tr[ro]+mark[ro];

mark[ro]:=0;

endelse

begin

inc(mark[ro*2],mark[ro]);

inc(mark[ro*2+1],mark[ro]);mark[ro]:;

=0

end;end;end;procedureas

k(ro,l,r,k:longint);varmid:longint;begin

updata(ro,l,r);ifl=rthenbegint:=tr[ro];exit;

end;mid:=(l+r)div2;ifk=midth

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档