Cod sursa(job #2612453)

Utilizator paulvlad43Vlad Paul Munteanu paulvlad43 Data 9 mai 2020 00:14:33
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include<iostream>
#include<fstream>
using namespace std;
#define Maxim 3000005
 
int v[Maxim];
 
 
 
 
 
int partitii(int v[Maxim], int li, int ls)
{
	int i = li-1; 
	int j = ls+1;
	int pivot= v[li + (rand()%(ls-li+1))];
 
	while(1)
	{
		do
		{
			++i;
		} while(v[i] < pivot);
 
		do
		{
			--j;
		} while(pivot< v[j]);
		if(i < j)
			swap(v[i], v[j]);
		else 
			return j;
	}
 
	return 0;
}
 
void quickselect(int v[Maxim], int li, int ls, int k)
{
	if(li == ls)
		return;
 
	int q = partitii(v, li, ls);
	int t = q-li+1;
 
	if(t >= k)
		quickselect(v, li, q, k);
	else
		quickselect(v, q+1, ls, k-t);
}
 
int main(){
	ifstream f("sdo.in");
	ofstream f1("sdo.out");
	int n,k;
	f>>n>>k;
	for (int i=1;i<=n;i++)
		f>>v[i];
	quickselect(v,1,n,k);
	f1<<v[k];
 
			
	
	
}