Cod sursa(job #578288)

Utilizator andreifirstCioara Andrei Ioan andreifirst Data 11 aprilie 2011 10:31:50
Problema Statistici de ordine Scor 100
Compilator fpc Status done
Runda Arhiva educationala Marime 1.35 kb
var v:array [1..3000000] of longint;
    buf1:array[1.. 1 shl 17] of char;
    i, n, k, aux, q, l, p:longint;
    s:string;
    f, g:text;

function citire:longint;
var aux:longint;
begin
aux:=0;
while (s[p]>='0') and (s[p]<='9') and (p<=l) do begin
       aux:=aux*10+ord(s[p])-48;
       if p=l then begin
          read(f, s);
          p:=0;
          l:=length(s);
       end;
       inc(p);
end;

while ((s[p]<'0') or (s[p]>'9'))and(s<>'') do begin
      inc(p);
      if p>l then begin
         read(f, s);
         p:=1;
         l:=length(s);
      end;
end;
citire:=aux;
end;


procedure qsort (st, dr:longint);
var s, d, p:longint;
  begin
  p:=random(dr-st+1)+st;
  aux:=v[p]; v[p]:=v[st]; v[st]:=aux;
  s:=st; d:=dr;
  while s < d do
    begin
    while (v[d]>=aux) and (s<d) do d:= d-1;
    v[s]:=v[d];
    while (v[s]<=aux) and (s<d) do s:= s+1;
    v[d]:=v[s];
    end;
  v[s]:=aux;
  if k <= s then
    begin
    if k = s then exit
             else qsort (st, s-1);
    end
            else begin qsort (s+1, dr); end;
  end;

begin
assign (f, 'sdo.in'); settextbuf (f, buf1); reset (f);
assign (g, 'sdo.out'); rewrite (g);
randomize;


readln (f, n, k);
read (f, s);
l:=length (s); p:=1;
for i := 1 to n do v[i]:=citire;

qsort (1, n);
q:=v[k];
writeln (g, q);

close (f); close (g);
end.