Cod sursa(job #661100)

Utilizator AnaTudorTudor Ana Maria Mihaela AnaTudor Data 13 ianuarie 2012 19:51:48
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<stdio.h>
#include<stdlib.h>
# define MAX 3000002

using namespace std;
int a[MAX],N,K;

void swap(int i,int j)
{ int aux=a[i];
a[i]=a[j];
a[j]=aux;
}

int partition(int left, int right)
{ int i=left-1,j=right+1,pivot=a[left+ rand()%(right-left+1)];
   while(1)
   {  do
        { i++;}while(a[i]<pivot);
      do
      {  j--; }while(a[j]>pivot);
      if(i<j)
       swap(i,j);
       else
       return j;
   }
  return 0;
}

void Quick(int left, int right, int k)
{ if (left==right)
       return;
  int x=partition(left,right);
  int y=x-left+1;
  if (y>=k)
   Quick(left,x,k);
   else
   Quick(x+1,right,k-y);
}

int main()
{ freopen("sdo.in","r",stdin);
  freopen("sdo.out","w",stdout);
  scanf("%d%d",&N,&K);
  for(int i=1;i<=N;++i)
   scanf("%d",&a[i]);
  Quick(1,N,K);
  printf("%d",a[K]);
}