Cod sursa(job #2145769)

Utilizator gabib97Gabriel Boroghina gabib97 Data 27 februarie 2018 16:44:39
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <bits/stdc++.h>
#define N 3000001
using namespace std;

int n, i, k, a[N];

void kth_element(int *a, int n, int k)
{
    if (n == 1) return;

    int p = rand() % n;

    int lower = 0, il = 0, iu = n;
    int *v = (int *) malloc(n * sizeof(int));

    for (int i = 0; i < n; i++)
        if (a[i] <= a[p]) 
        {
            lower++;
            v[il++] = a[i];
        }
        else
            v[--iu] = a[i];

    memcpy(a, v, n * sizeof(int));
    free(v);

    if (lower >= k)
        kth_element(a, lower, k);
    else
        kth_element(a + lower, n - lower, k - lower);
}

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

    scanf("%i%i", &n, &k);
    for (i = 0; i < n; i++)
        scanf("%i", &a[i]);

    srand(time(NULL));
    
    kth_element(a, n, k);
    printf("%i", a[k - 1]);
    return 0;
}