Cod sursa(job #821047)

Utilizator Alexa_ioana_14Antoche Ioana Alexandra Alexa_ioana_14 Data 21 noiembrie 2012 16:27:48
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include<cstdio>
#include<algorithm>
#include<stdlib.h>
#include<time.h>
using namespace std;
#define NM 3000005
int v[NM];
int N,k;
inline int aranjeaza(int st, int dr) {
    srand((unsigned)time(NULL));
    int poz = rand()%N+1;
    int x = v[poz];

    int aux = v[poz];
    v[poz]=v[st];
    v[st]=aux;
    int i=st;
    for (int j = st+1; j<=dr; ++j) {
        if(v[j]<x) {
            ++i;
            int aux = v[i];
            v[i]=v[j];
            v[j]=aux;
        }
    }
    aux = v[i];
    v[i]=v[st];
    v[st]=aux;
    return i;
}
int main(){

    freopen("sdo.in","r",stdin);
    freopen("sdo.out","w",stdout);
    scanf("%d%d",&N,&k);
    for (int i=1; i<=N; ++i) {
        scanf("%d",&v[i]);

    }

    int pivot = N+1;
    int st=1,dr=N,rest=0;
    do{
        pivot = aranjeaza(st,dr);
        if (rest+pivot < k) {
            st = pivot + 1;
        } else {
            dr = pivot-1;
            rest += dr-st+1;
        }

    } while (pivot!=k);
    printf("%d",v[k]);
    return 0;
}