Cod sursa(job #1539173)

Utilizator ili226Vlad Ilie ili226 Data 30 noiembrie 2015 13:36:26
Problema Statistici de ordine Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 0.94 kb
type sir=array[1..3000003]of longint;
var a:sir;
    n,k,nr,i:longint;
    f:text;
function quickselect(st,dr,x:longint;s:sir):longint;
var k,t:longint;
function poz(p:longint):longint;
var i,j,aux:longint;
    bun:boolean;
begin
 i:=st-1;j:=dr+1;bun:=true;
 while bun do
  begin
   repeat inc(i) until s[i]>=p;
   repeat dec(j) until s[j]<=p;
   if i<j then
    begin
     aux:=s[i];
     s[i]:=s[j];
     s[j]:=aux;
    end
          else
     bun:=false;
  end;
 poz:=j;
end;

begin
 if st=dr then
  begin
   quickselect:=s[st];
   exit
  end;
 k:=random(dr-st)+st;
 k:=poz(s[k]);
 t:=k-st+1;
 if k<x then quickselect:=quickselect(k+1,dr,x-t,s)
        else quickselect:=quickselect(st,k,x,s)
end;

begin
randomize;
 assign(f,'sdo.in');
 reset(f);
 readln(f,n,k);
 for i:=1 to n do
  read(f,a[i]);
 close(f);
 nr:=quickselect(1,n,k,a);
 assign(f,'sdo.out');
 rewrite(f);
 writeln(f,nr);
 close(f);
end.