Cod sursa(job #2604536)

Utilizator ViAlexVisan Alexandru ViAlex Data 22 aprilie 2020 20:48:44
Problema Statistici de ordine Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.77 kb
#include<bits/stdc++.h>
using namespace std;

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

int values[3000000],num_values,k;

void read(){
	in>>num_values>>k;
	for(int i=0;i<num_values;i++)
		in>>values[i];
	k--;
}

int partition(int left,int right){

	int pivot_index=left+rand()%(left-right+1);
	swap(values[pivot_index],values[right]);
	int pivot=values[pivot_index];
	int i=left;

	for(int j=left;j<=right;j++){
		if(values[j]<pivot){
			swap(values[i],values[j]);
			i++;
		}
	}

	swap(values[i],values[right]);
	return i;
}
void qsort(int left,int right,int k){
	if(left>=right)
		return;
	int piv=partition(left,right);

	if(k<piv)
		qsort(left,piv-1,k);
	else if (k>piv)
		qsort(piv+1,right,k);
}


int main(){

	read();
	qsort(0,num_values-1,k);
	out<<values[k];
	return 0;
}