Cod sursa(job #659079)

Utilizator Marius_mFMI-M2 Marius Melemciuc Marius_m Data 9 ianuarie 2012 23:31:24
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<stdio.h>
#include<cstdlib>
#define Nmax 3000002

using namespace std;

FILE *c,*d;
int a[Nmax],n,k;

void read()
{
	int i;
	fscanf(c,"%d %d",&n,&k);
	for(i=1;i<=n;i++)
		fscanf(c,"%d",&a[i]);
}

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

int partitionize(int l,int r)
{
	int i=l-1,j=r+1,value=a[l+rand()%(r-l+1)];
	while(1)
	{
		do
			i++;
		while(a[i]<value&&i<n);
		do
			j--;
		while(a[j]>value&&j>1);
		if(i<j)
			swap(a[i],a[j]);
		else
			return j;
	}
}

void quick(int st,int dr,int x)
{
	int t,q;
	if(st<dr)
	{
		t=partitionize(st,dr);
		q=t-st+1;
		if(q>=x)
			quick(st,t,x);
		else
			quick(t+1,dr,x-q);;
	}
}

int main()
{
	c=fopen("sdo.in","r");
	d=fopen("sdo.out","w");
	read();
	quick(1,n,k);
	fprintf(d,"%d",a[k]);
	fclose(c);
	fclose(d);
	return 0;
}