Cod sursa(job #855148)

Utilizator mariacMaria Constantin mariac Data 14 ianuarie 2013 18:38:47
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#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(v[i]==r&&i-j==1)i++;
			else if(v[j]==r&&i-j==1)j--;
		if(k>j-st+1)
		{
			k-=j-st+2;
			if(!k)fout<<r;
				else 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;
}