Cod sursa(job #2609690)

Utilizator smitoiStefan Mitoi smitoi Data 3 mai 2020 01:39:55
Problema Statistici de ordine Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <iostream>
#include <vector>
#include <bits/stdc++.h>
#include <algorithm>

using	namespace std;

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

long long int		k, n, v[3000002];

long long int partitie(long long int v[], long long int l, long long int r)
{
	long long int i = l;
	
	for (int j = l; j < r; j++)
		if (v[j] <= v[r])
		{
			swap(v[j], v[i]);
			i++;
		}
	swap (v[i], v[r]);
	return i;
}

long long int quick_select(long long int v[], long long int l, long long int r, long long int k)
{
	if (k >= 0 && k <= r - l + 1)
	{
		int i = partition(v, l, r);
		
		if (i == k)
			return v[i];
		
		if (i - l > k - 1)
			return quick_select(v, l, i - 1, k);
		else
			return quick_select(v, i + 1, r, k + l - i - 1);
	}
	
	return -1;
}

int	main()
{
	ios_base::sync_with_stdio(false); 
    cin.tie(NULL); 
	f >> n >> k;
	for (int i = 0; i < n; i++)
		f >> v[i];
	
	quick_select(v, 0, n - 1, k);
	
	g << v[k - 1];

	return	0;
}