Cod sursa(job #473202)

Utilizator mlazariLazari Mihai mlazari Data 28 iulie 2010 13:43:48
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include<fstream>
#include<ctime>
#include<cstdlib>

using namespace std;

#define NMAX 3000003

int n,k,i,l,r,m,p,d;
int M[NMAX];
ifstream fi("sdo.in");
ofstream fo("sdo.out");


int qsort(int l,int r) {
  d=0;
  p=l+rand()%(r-l+1);
  if(p!=l) {
    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() {
  fi>>n>>k;
  --k;
  for(i=0;i<n;i++) fi>>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);
  fo<<M[m]<<"\n";
  return 0;
}