Cod sursa(job #1009922)

Utilizator hevelebalazshevele balazs hevelebalazs Data 13 octombrie 2013 23:49:18
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#define fr(i,a,b) for(int i=a;i<b;++i)
#define N 3000000
int a[N];
int rand(int i,int j){return i+rand()%(j-i);}
int kth(int l,int r,int k){
    if(l==r)return a[l];
    int l1=l-1,r1=r+1,x=a[rand(l,r)];
    while(1){
        do{--r1;}while(a[r1]>x);
        do{++l1;}while(a[l1]<x);
        if(l1<r1) a[l1]^=a[r1]^=a[l1]^=a[r1];else break;
        }
    if(r1>=k) return kth(l,r1,k); return kth(r1+1,r,k);
    }
int main(){
    freopen("sdo.in","r",stdin);
    freopen("sdo.out","w",stdout);
    srand(time(NULL));
    int n,k;
    scanf("%i%i",&n,&k);
    fr(i,0,n)scanf("%i",a+i);
    printf("%i\n",kth(0,n-1,k-1));
    return 0;
    }