Cod sursa(job #2295933)

Utilizator stan_flaviusStan Flavius Stefan stan_flavius Data 4 decembrie 2018 01:08:14
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.79 kb
#include <fstream>
#include <cstdlib>
#include <algorithm>
#define nmax 3000001
using namespace std;
ifstream fin("sdo.in");
ofstream fout("sdo.out");

int a[nmax],n,k;

int AlegRandPivot(int st,int dr)
{ int random=st+rand()%(dr-st);
  return random;
}

int partitie(int st, int dr)
{ int pivot=a[dr];
  int i,j;
  i=st-1;
  for(j=st; j<dr; j++)
     if(a[j]<pivot) {i++; swap(a[i],a[j]);}
  swap(a[i+1],a[dr]);
  return i+1;
}

int fc(int st,int dr)
{ if(st>=dr) return st;
  int pivot=AlegRandPivot(st,dr);
  swap(a[pivot],a[dr]);
  int poz=partitie(st,dr);
  if(poz>k) return fc(st,poz-1);
  if(poz<k) return fc(poz+1,dr);
  return poz;
}

int main()
{ fin>>n>>k;
  int i;
  for(i=1; i<=n; i++) fin>>a[i];
  int pozitie=fc(1,n);
  fout<<a[pozitie];
    return 0;
}