1. 程式人生 > >莫隊模板

莫隊模板

var fun long false clas ole true pro until

function check(x1,y1,x2,y2:longint):boolean;
begin
  if (trunc(x1/sqrt(n))>trunc(y1/sqrt(n)))or(trunc(x1/sqrt(n))=trunc(y1/sqrt(n)))and(x2>y2) then
  exit(true)
  else
  exit(false);
end;
procedure sort(ll,rr:longint);
var i,j,x,y,z:longint;
begin
  i:=ll;
  j:=rr;
  x:=l[(ll+rr) div 2];
  z:=r[(ll+rr) div
2]; repeat while check(l[i],x,r[i],z) do inc(i); while check(x,l[j],z,r[j]) do dec(j); if not(i>j) then begin y:=l[i]; l[i]:=l[j]; l[j]:=y; y:=r[i]; r[i]:=r[j]; r[j]:=y; y:=num[i]; num[i]:=num[j]; num[j]:=y; inc(i); dec(j); end; until
i>j; if ll<j then sort(ll,j); if i<rr then sort(i,rr); end;

莫隊模板