Cod sursa(job #2394957)

Utilizator CezarTDTodirisca Cezar CezarTD Data 2 aprilie 2019 09:32:40
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.77 kb
#include <bits/stdc++.h>
#define N 3000010
using namespace std;

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

int partitie(int st,int dr,int *A)
{
    int p=rand()%(dr-st+1)+st;
    swap(A[p],A[dr]);
    int pivot=A[dr],pIndex=st;
    for(int i=st;i<dr;i++)
    {
        if(A[i]<=pivot)
        {
            swap(A[i],A[pIndex]);
            pIndex++;
        }
    }
    swap(A[pIndex],A[dr]);
    return pIndex;
}

int quick(int st,int dr,int *A,int x)
{
    int ind=partitie(st,dr,A);
    if(ind==x)return A[ind];
    if(x<ind)return quick(st,ind-1,A,x);
    else return quick(ind+1,dr,A,x);
}

int main()
{
    int n,x;
    int *A= new int[N];
    fin>>n>>x;
    for(int i=1;i<=n;i++)fin>>A[i];
    fout<<quick(1,n,A,x);
    return 0;
}