Cod sursa(job #381371)

Utilizator ConsstantinTabacu Raul Consstantin Data 10 ianuarie 2010 14:13:29
Problema Statistici de ordine Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int v[3000010],i,p,u,k,n,m;

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


int part(int v[],int li,int lf){
int s=li,i,p = li + rand()%(lf - (li + 1));
swap(v[p],v[li]);

for( i = li + 1; i <= lf ; i++)
	if(v[i] < v[li]){
		s ++;
		swap(v[s],v[i]);
	}
swap(v[li],v[s]);
return s;

}


int main(){
freopen("sdo.in","r",stdin);
freopen("sdo.out","w",stdout);

scanf("%d %d",&n,&k);

for(i = 1; i <= n ; i++)
	scanf("%d",&v[i]);

srand(time(0));
p = 1; u = n;
while(true){
	m = part(v,p,u);
	if(m == k){printf("%d",v[k]);return 0;}
	else
	if(m > k){u = m - 1;}
	else
	p = m + 1;
	}


return 0;}