Cod sursa(job #612671)

Utilizator maritimCristian Lambru maritim Data 9 septembrie 2011 14:52:04
Problema Statistici de ordine Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include<stdio.h>

#define MaxN 3000001

int A[MaxN];
int N,K;

void citire(void)
{
	FILE *f = fopen("sdo.in","r");
	
	fscanf(f,"%d %d",&N,&K);
	for(int i=1;i<=N;i++)
		fscanf(f,"%d ",&A[i]);
	
	fclose(f);
}

int part(int li,int ls)
{
	int c = A[(li+ls)/2];
	A[(li+ls)/2] = A[li];
	A[li] = c; 
	int i=li,j=ls,i1 = 1,j1 = 0;
	for(;i < j;i += i1,j += j1)
		if(A[i] > A[j])
		{
			c = A[i];
			A[i] = A[j];
			A[j] = c;
			c = -i1;
			i1 = -j1;
			j1 = c;
		}
	return j;
}

int SDO(int li,int ls,int i)
{
	int k;
	k = part(li,ls);
	if(i == k)
		return A[k];
	if(i <= k)
		return SDO(li, k-1, i);
	else
		return SDO(k,ls,i);
}

int main()
{
	FILE *g = fopen("sdo.out","w");
	
	citire();
	fprintf(g,"%d ",SDO(1,N,K));
	
	fclose(g);
	return 0;
}