Cod sursa(job #1022118)

Utilizator vladm97Matei Vlad vladm97 Data 4 noiembrie 2013 19:31:12
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>
#include <iostream>
#include <cstdlib>
#include <time.h>

#define length 3000010

using namespace std;

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

int input[length],n,k;

void read()
{
    in>>n>>k;
    for(int i=1;i<=n;i++)
    {
        in>>input[i];
    }
}

void write()
{
    out<<input[k];
}

void quicksort(int left, int right)
{
    if(left>right)
    {
        return;
    }
    int l,r,pivot;
    l = left;
    r = right;
    if(right != left)
    {
        pivot = input[(rand() % (right-left)) + left];
    }
    else
    {
        pivot = input[left];
    }

    while(l<=r)
    {
        while(input[l]<pivot)
        {
            l++;
        }
        while(input[r]>pivot)
        {
            r--;
        }
        if(l<=r)
        {
            swap(input[l],input[r]);
            l++;
            r--;
        }
    }

    if(r<k)
    {
        quicksort(l,right);
    }
    else
    {
        quicksort(left,r);
    }
}

int main()
{
    srand ( time(NULL) );
    read();
    quicksort(1,n);
    write();
}