Cod sursa(job #2343770)

Utilizator Monstergentleman35Ciopraga Razvan Monstergentleman35 Data 14 februarie 2019 12:34:04
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("sdo.in");
ofstream fout("sdo.out");

unsigned int n,k,indicecaut;
unsigned int A[4000002];

unsigned int Qselect(unsigned int p,unsigned int q);
unsigned int Divide(unsigned int p,unsigned int q);

int main()
{
 fin>>n>>indicecaut;
 for (k=1;k<=n;k++)
  fin>>A[k];
 fout<<Qselect(1,n);
 return 0;
}

unsigned int Qselect(unsigned int p,unsigned int q)
{
 unsigned int m;
 m=Divide(p,q);
 if (m==indicecaut)
  return A[m];
 else if (m>indicecaut)
  Qselect(p,m-1);
 else if (m<indicecaut)
  Qselect(m+1,q);
}

unsigned int Divide(unsigned int p,unsigned int q)
{
 unsigned int st,dr,x,pivot;
 st=p;
 dr=q;
 pivot=p+rand()%(q-p+1);
 x=A[pivot];
 swap(A[st],A[pivot]);
 while (st<dr)
 {
  while (st<dr&&A[dr]>=x)
   dr--;
  A[st]=A[dr];
  while (st<dr&&A[st]<=x)
   st++;
  A[dr]=A[st];
 }
 A[st]=x;
 return st;
}