Cod sursa(job #866401)

Utilizator enedumitruene dumitru enedumitru Data 27 ianuarie 2013 23:16:06
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <cstdio> 
#include <algorithm> 
using namespace std; 
FILE *f,*g; 
int v[3000010]; 
int n,k; 
int partitie(int st, int dr) 
{   int  x=v[(rand()%(dr-st+1))+st]; 
    int j=dr+1,i=st-1; 
    while (1) 
    {  do i++; while(v[i]<x);
       do j--; while(x<v[j]); 
       if (i<j) swap(v[i],v[j]); else return j; 
    } 
} 
int divide(int st, int dr) 
{   if(st==dr) return v[st]; 
    int q=partitie(st,dr); 
    if (k<=q) 
		return (divide(st,q)); 
    else
        return (divide(q+1,dr)); 
}   
int main() 
{   f=fopen("sdo.in","r"); g=fopen("sdo.out","w");
    fscanf(f,"%d%d",&n,&k); 
    for(int i=1;i<=n;i++) fscanf(f,"%d",&v[i]); 
    fprintf(g,"%d",divide(1,n)); 
    return 0; 
}