Cod sursa(job #651615)

Utilizator codrina_91Pintea codrina codrina_91 Data 20 decembrie 2011 22:22:16
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
#include <iostream>
#include <cmath>

using namespace std;
ifstream f("sdo.in");
ofstream g("sdo.out");
int v[3000000],n,k,i,leg[3000000];
int m,cap=0,maxi,a;

void radix_sort()
{
	int p[100],u[100]; 
	int i,j,k,l,d=1;
	//golim cozi
	for (i=0;i<n;i++)
		leg[i]=i+1;
	//facem de m ori distribuirea
	for (i=1;i<=m;i++)
	{
		for (j=0;j<100;j++)
		p[j]=u[j]=-1;
		l=cap;
		for (j=0;j<n;j++)
		{
			k=(v[l]/d)%100;//sa incerc cu o var globala
			
			if (p[k]==-1) p[k]=u[k]=l;
			else 
			{
				leg[u[k]]=l;u[k]=l;//5 3 6 8 1 6 8 3 48 999
			}
			l=leg[l];
		}
		//leg cozi
		j=0;
		while (p[j]==-1) 
			j++;
		cap=p[j];
		while (j<9)
		{
			for (k=j+1;k<100;k++)
				if (p[k]!=-1)
				{//fac legatura
					leg[u[j]]=p[k];
					break;
				}
			j=k;
		}
		d=d*100;
	}
}
int nr_cif(double n)
{
	return (int)(floor(log10(n))/2+1);
}

int main()
{
	f>>n;f>>k;
	for (i=0;i<n;i++)
	{
		f>>v[i];
		if (v[i]>maxi) maxi=v[i];
	}
	m=nr_cif(maxi);
	
	radix_sort();
	a=cap;
	for (i=2;i<=k;i++)
		a=leg[a];
	g<<v[a];
	return 0;
}