Cod sursa(job #855194)

Utilizator mariacMaria Constantin mariac Data 14 ianuarie 2013 19:15:20
Problema Statistici de ordine Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <stdlib.h>
#include <time.h>
#include<fstream>


using namespace std;

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

int n, k, v[3000001];

void sort(int st,int dr)
{
	if(st<dr)
	{
		srand ( time(NULL) );
		
		int r,e1,e2,e3;
		
		r=dr-st+1;
		
		e1=rand()%r+st;
		e2=rand()%r+st;
		e3=rand()%r+st;
		
		if(v[e1]<=v[e2]&&v[e2]<=v[e3]||v[e1]>=v[e2]&&v[e2]>=v[e3])r=e2;
			else if(v[e2]<=v[e1]&&v[e1]<=v[e3]||v[e2]>=v[e1]&&v[e1]>=v[e3])r=e1;
				else r=e3;
		int i,j;
				
		i=st;
		j=dr;
		r=v[r];
		while(i<=j)
		{
			while(v[i]<r)i++;
			while(v[j]>r)j--;
			if(i<=j)
			{
				int aux;
				aux=v[i];
				v[i]=v[j];
				v[j]=aux;
				i++;
				j--;
			}
		}
		if(i-j==1&&k==i-1)fout<<v[i-1]<<" ";
			else if(k>=i) sort(i,dr);
				
		     	else sort(st,j);
	
	}
	else fout<<v[st]<<" ";
}
		
		


int main()
{
	fin>>n;
	fin>>k;
	
	int i;
	for(i=1;i<=n;i++)
		fin>>v[i];
	
	sort(1,n);
	
	return 0;
}