Cod sursa(job #551889)

Utilizator DuxarFII-Stefan-Negrus Duxar Data 11 martie 2011 11:52:54
Problema Statistici de ordine Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include<cstdio>
#include<algorithm>
using namespace std;

int n,k,a[3000001];

void read();
void sdo(int,int,int);
void write();

int main()
{
  freopen ("sdo.in","r",stdin);
  freopen ("sdo.out","w",stdout);
  
  read();
  sdo(1,n,k);
  write();
  
  return 0;
}

void read()
{
  int i;
  scanf("%d%d",&n,&k);
  for (i=1;i<=n;++i)
    scanf("%d",&a[i]);
}

void sdo(int in,int sf,int k)
{
  int nr,i,j,x;
  x=rand()%(sf-in+1)+in;
  nr=a[x];
  swap(a[x],a[sf]);
  i=in-1;
  for (j=in;j<sf;++j)
    if (a[j]<=nr)
    {
      ++i;
      swap (a[i],a[j]);
    }
  swap (a[i+1],a[sf]);
  nr=i+1;
  if (nr==k) return;
  else if (nr>k) sdo(in,nr-1,k);
  else sdo(nr+1,sf,k);
}

void write()
{
  printf("%d",a[k]);
}