Cod sursa(job #2834401)

Utilizator ViAlexVisan Alexandru ViAlex Data 16 ianuarie 2022 22:10:52
Problema Statistici de ordine Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include<stdio.h>
#include<stdlib.h>

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

inline void swap(int&a,int &b){
	aux=b;
	b=a;
	a=aux;
}

int partition(int left,int right){
	int pivot=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(){
	FILE* fin=fopen("sdo.in","r");
	fscanf(fin,"%d %d",&n,&k);

	for(int i=0;i<n;i++){
		fscanf(fin,"%d",&v[i]);
	}
}


void solve(){
	FILE* fout=fopen("sdo.out","w");
	fprintf(fout,"%d ",find(0,n-1,k));
}

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