Cod sursa(job #473137)

Utilizator mlazariLazari Mihai mlazari Data 28 iulie 2010 11:03:45
Problema Statistici de ordine Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include<stdio.h>
#include<stdlib.h>
#include<ctime>

#define NMAX 3000003

int n,k,i,l,r,m,p,d;
int M[NMAX];

int qsort(int l,int r) {
  d=0;
  p=l+rand()%(r-l+1);
  M[l]^=M[p];
  M[p]^=M[l];
  M[l]^=M[p];
  while(l<r) {
    if(M[l]>M[r]) {
      M[l]^=M[r];
      M[r]^=M[l];
      M[l]^=M[r];
      d=1-d;
    }
    if(d)
     do l++; while(M[l]<M[r]);
    else
     do r--; while(M[l]<M[r]);
  }
  return l;
}

int main() {
  freopen("sdo.in","r",stdin);
  freopen("sdo.out","w",stdout);
  scanf("%d%d",&n,&k);
  --k;
  for(i=0;i<n;i++) scanf("%d",M+i);
  l=0;
  r=n-1;
  srand(time(NULL));
  do {
    m=qsort(l,r);
    if(m<k) l=m+1;
    else r=m-1;
  } while(m!=k);
  printf("%d\n",M[m]);
  return 0;
}