Cod sursa(job #1278972)

Utilizator obidanDan Ganea obidan Data 29 noiembrie 2014 16:44:35
Problema Statistici de ordine Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <stdlib.h>
using namespace std;
#define NMax 3000002
int a[NMax];
int n,k;
void nth(int l, int r, int k)
{
    if(r-l<1) return;
    else
    {
        int pindex= rand()%(r-l+1) + l;
        int pivot=a[pindex];
        int i=l,j=r;
        while(i<=j)
        {
            while(a[i]<pivot)i++;
            while(a[j]>pivot)j--;
            if(i<=j)
            {
                swap(a[i],a[j]);
                i++;
                j--;
            }
        }
        if(i>k)
            nth(l,i-1,k);
        else
            nth(i,r,n-i+1);
    }
}

int main()
{
    srand(1337);
    freopen("sdo.in","r",stdin);
    freopen("sdo.out","w",stdout);
    scanf("%d %d",&n,&k);
    for( int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
    }
    nth(1,n,k);
   // for( int i=1;i<=n;i++)
   //     cout<<a[i]<<" ";
    cout<<a[k];
}