Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
我不太说得清楚,您一看代码就明白了。。。In Reply To:见内。。。 Posted by:js05 at 2005-05-13 15:08:07 type point=record x,y:longint; end; var ps:array [1..15000] of point; num:array [0..14999] of longint; c:array [1..32001] of longint; n,limit:longint; procedure init; var i:longint; begin readln(n); limit:=0; for i:=1 to n do begin readln(ps[i].x,ps[i].y); inc(ps[i].x); inc(ps[i].y); if ps[i].y>limit then limit:=ps[i].y; end; end; procedure swap(var a,b:point); var c:point; begin c:=a; a:=b; b:=c; end; procedure qsort(s,t:longint); var i,j:longint; x:point; begin swap(ps[s],ps[s+random(t-s)+1]); i:=s; j:=t; x:=ps[s]; while i<j do begin while ((ps[j].x>x.x) or ((ps[j].x=x.x) and (ps[j].y>x.y))) and (j>i) do dec(j); if i<j then begin ps[i]:=ps[j]; inc(i); end; while ((ps[i].x<x.x) or ((ps[i].x=x.x) and (ps[i].y<x.y))) and (i<j) do inc(i); if j>i then begin ps[j]:=ps[i]; dec(j); end; ps[i]:=x; end; if s<pred(i) then qsort(s,pred(i)); if succ(i)<t then qsort(succ(i),t); end; function lowbit(x:longint):longint; begin lowbit:=x and (x xor (x-1)); end; procedure insert(x:longint); begin while x<=limit do begin inc(c[x]); inc(x,lowbit(x)); end; end; function sum(x:longint):longint; begin sum:=0; while x>0 do begin inc(sum,c[x]); dec(x,lowbit(x)); end; end; procedure main; var i:longint; begin filldword(num,sizeof(num) div 4,0); filldword(c,sizeof(c) div 4,0); for i:=1 to n do begin inc(num[sum(ps[i].y)]); insert(ps[i].y); end; end; procedure print; var i:longint; begin for i:=0 to n-1 do writeln(num[i]); end; begin init; qsort(1,n); main; print; end. 莫非此代码不是nlogn的复杂度? Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator