Cod sursa(job #1965580)

Utilizator GabiTulbaGabi Tulba-Lecu GabiTulba Data 14 aprilie 2017 14:44:50
Problema Statistici de ordine Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
#include <algorithm>
#include <cmath>
#include <ctime>

using namespace std;

const int INF=2140e6;
const int MaxN=3e6+5;
FILE *IN,*OUT;

int N,K,v[MaxN];
int Partition(int *s,int start,int end)
{
	int index=start,piv=s[start+rand()%(end-start+1)];
	for(int i=start;i<=end;i++)
		if(v[i]<=piv)
			swap(v[i],v[index++]);
	return index-1;
}
int N_th_Element(int *s,int start,int end,int k)
{
		int index=Partition(s,start,end);
		if(index-start+1==k)
			return s[index];
		else if(index-start+1>k)
			return N_th_Element(s,start,index,k);
		else if(index-start+1<k)
			return N_th_Element(s,index+1,end,k-index+start-1);
}
int main()
{
	IN=fopen("sdo.in","r");
	OUT=fopen("sdo.out","w");

	srand(time(NULL));

	fscanf(IN,"%d%d",&N,&K);
	for(int i=1;i<=N;i++)
		fscanf(IN,"%d",&v[i]);
	fprintf(OUT,"%d\n",N_th_Element(v,1,N,K));

	return 0;
}