讨论 / 双关键字快排
习新果 2013-02-01 23:58:00
点我顶贴 收藏 删除
呵呵,就快排就没有了

program xxg;

var

n,k,i,j,t,e,p:longint;

a,w:array[1..500000]of longint;

b:array[1..10]of longint;

procedure xxg(l,r:longint);

var

i,j,x,y,g:longint;

begin

i:=l;j:=r;x:=a[(l+r) shr 1];g:=w[(l+r) shr 1];

repeat

while (a[i]<x)or(a[i]=x)and(w[i]>g) do inc(i);

while (a[j]>x)or(a[j]=x)and(w[j]<g) do dec(j);

if i<=j then

begin

y:=a[i];

a[i]:=a[j];

a[j]:=y;

y:=w[i];

w[i]:=w[j];

w[j]:=y;

i:=i+1;j:=j-1;

end;

until i>j;

if l<j then xxg(l,j);

if i<r then xxg(i,r);

end;

begin

read(n,k); for i:=1 to n do w[i]:=i;

for i:=1 to 10 do read(b[i]);

for i:=1 to n do read(a[i]);

xxg(1,n);

for i:=1 to n do a[i]:=a[i]+b[(n-i)mod 10+1] ;

xxg(1,n);

for i:=n downto n-k+1 do

write(w[i],' ');

end.

各位大神指教

查看更多回复
提交回复