Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

双重快排可以实现贴PASCAL代码》》》》》

Posted by God_Neptune_Poseidon at 2015-09-12 18:47:03 on Problem 2010
type
 arr=array[0..100000]of longint;
var
  a,b,c,d:arr;
   n,m,t,i,l,r,King,Exo,mid,x,y,k:longint;
procedure qsort(var a,b:arr);
 procedure sort(l,r:longint);
  var
   i,j,x,y:longint;
  begin
   i:=l; j:=r;
   x:=a[(l+r)>>1];
   repeat
    while a[i]<x do inc(i);
    while x<a[j] do dec(j);
    if not(i>j) then
     begin
      y:=a[i]; a[i]:=a[j]; a[j]:=y;
      y:=b[i]; b[i]:=b[j]; b[j]:=y;
      inc(i); dec(j);
     end;
   until i>j;
   if l<j then sort(l,j);
   if i<r then sort(i,r);
  end;
 begin
  sort(1,m);
 end;
begin
 read(n,m,t);
 for i:=1 to m do read(a[i],b[i]);
 c:=a; d:=b;
 qsort(b,a);
 qsort(c,d);
 for i:=1 to n do inc(Exo,b[i]);
 if Exo>t then
  begin writeln(-1); halt; end;
 l:=1; r:=m;
 while l<r do
  begin
   mid:=(l+r+1)>>1;
   King:=c[mid];
   Exo:=d[mid];
   x:=0; y:=0; i:=0; k:=0;
   while (x+y<n-1)and(i<m) do
    begin
     inc(i);
     if (k=0)and(a[i]=King)and(b[i]=d[mid]) then
      begin inc(k); continue; end;
     if (x<n>>1)and(a[i]<King) then
      begin inc(x); inc(Exo,b[i]); end;
     if a[i]>=King then
      begin inc(y); inc(Exo,b[i]); end;
    end;
   if (Exo>t)or(x+y<n-1) then r:=mid-1 else l:=mid;
  end;
 writeln(c[l]);
end.

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator