Cod sursa(job #2834404)

Utilizator ViAlexVisan Alexandru ViAlex Data 16 ianuarie 2022 22:14:10
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.76 kb
#include<iostream>
#include<fstream>
#include<stdlib.h>
using namespace std;

const int mx=3e6+10;
int v[mx],n,k;

int partition(int left,int right){
	int index=rand()%(right-left+1)+left; 
	int pivot=v[index];
	swap(v[index],v[right]);
	
	int j=left;
	for(int i=left;i<=right;i++){
		if(v[i]<=pivot){
			swap(v[j],v[i]);
			j++;
		}	
	}
	return j-1;
} 

int find(int left, int right,int nth){
	if(left==right){
		return v[left];
	}
	int p=partition(left,right);
	int lcount=p-left;
	if(nth<=lcount){
		return find(left,p-1,nth);	
	}
	else{
		return find(p,right,nth-lcount);
	}
}


void read(){
	ifstream in("sdo.in");
	in>>n>>k;
	for(int i=0;i<n;i++){
		in>>v[i];
	}
}


void solve(){
	ofstream out("sdo.out");
	out<<find(0,n-1,k);
}

int main(){
	read();
	solve();
	return 0;
}