码迷,mamicode.com
首页 > 其他好文 > 详细

莫队模板

时间:2018-02-04 16:39:13      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:check   func   long   sqrt   while   exit   cti   begin   proc   

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;

 

莫队模板

标签:check   func   long   sqrt   while   exit   cti   begin   proc   

原文地址:https://www.cnblogs.com/qbwhtc/p/8413331.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!