Cod sursa(job #924052)

Utilizator taigi100Cazacu Robert taigi100 Data 24 martie 2013 09:14:17
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include<stdio.h>
#include<ctime>
#include <cstdlib>
#include<iostream>
using namespace std;
#define max 3000002

int v[max],n,k;

int part(int v[max],int left,int right)
{
	int i=left-1,j=right+1,mid=v[(left+(rand()%(right-left+1)))];
	while(1)
	{
		do
		{
			i++;
		}
		while(v[i]<mid);
		do
		{
			j--;
		}
		while(mid<v[j]);
		if(i<j)
			swap(v[i],v[j]);
		else
			return j;
	}
	return 0;
}
void quicksort(int v[max],int left,int right,int k)
{
	
	if(left==right)
		return;

	int p=part(v,left,right);
	int t=p-left+1;
	
	if(t >= k )
		quicksort(v,left,p,k);
	else
		quicksort(v,p+1,right,k-t);
}

int main()
{
	freopen("sdo.in","r",stdin);
	freopen("sdo.out","w",stdout);

	scanf("%d %d",&n,&k);
	time_t t;
	time(&t);
	srand(t);
	for(int i=1;i<=n;i++)
		scanf("%d",&v[i]);
	
	quicksort(v,1,n,k);

	printf("%d",v[k]);
}