Cod sursa(job #2077931)

Utilizator asavoaeigeoAsavoaei Georgiana asavoaeigeo Data 28 noiembrie 2017 18:58:36
Problema Statistici de ordine Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>
#include <stdlib.h>
using namespace std;
int n, a[300005],k;
ifstream cin("sdo.in");
ofstream cout("sdo.out");
void Citire()
{
    cin>>n;
    cin>>k;
    for(int i=1;i<=n;i++)
        cin>>a[i];
}

int partitie(int left,int right)
{
    int pivot=left + (rand() % (right-left+1));
    int valPivot=a[pivot];
    int storeIndex=left;
    swap(a[pivot],a[right]);
    for(int i=left;i<right;i++)
    {
        if(a[i]<valPivot)
        {
            swap(a[i],a[storeIndex]);
            storeIndex++;
        }
    }
    swap(a[storeIndex],a[right]);
    return storeIndex;
}

void Find(int p, int q, int k)
{
    if(p==q) {cout<<a[p];exit(0);}
    int r=partitie(p, q);
    if(k==r) {cout<<a[r];exit(0);}
    else if(k<r) Find(p, r-1,k);
    else Find(r+1,q, k);

}
int main()
{
    Citire();
    Find(1, n, k);
    return 0;
}