Cod sursa(job #1410307)

Utilizator StefanRARapeanu-Andreescu Stefan StefanRA Data 30 martie 2015 23:27:29
Problema Statistici de ordine Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <fstream>
int n, i, k, v[3000001];
std::ifstream fin("sdo.in");
std::ofstream fout("sdo.out");
int quick_select(int* input, int p, int r, int k)
{
	int m=p, n=r;
    if (p==r) return input[p];
	int pivot = input[n];
    while ( m < n )
    {
        while ( input[m] < pivot )
            m++;
        
        while ( input[n] > pivot )
            n--;
        
        if ( input[m] == input[n] )
            m++;
        else if ( m < n ) {
            int tmp = input[m];
            input[m] = input[n];
            input[n] = tmp;
        }
    }
	int j=n;
    int length = j - p + 1;
    if ( length == k ) return input[j];
    else if ( k < length ) return quick_select(input, p, j - 1, k);
    else  return quick_select(input, j + 1, r, k - length);
}
int main()
{
	fin>>n>>k;
	for (i=1;i<=n;i++)
	{
		fin>>v[i];
	}
	fout<<quick_select(v, 1, n, k);
	return 0;
}