Cod sursa(job #2947822)

Utilizator DobraVictorDobra Victor Ioan DobraVictor Data 26 noiembrie 2022 19:07:45
Problema Statistici de ordine Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <time.h>

const uint32_t MAX_N = 3000000;

void Sort(uint32_t n, uint32_t k, uint32_t* v) {
    if(n < 2)
        return;

    uint32_t pivot = v[rand() % n];
    
    uint32_t begin = 0, end = n - 1;

    while(v[begin] < pivot)
        ++begin;
    while(v[end] > pivot)
        --end;

    while(begin < end) {
        uint32_t aux = v[begin];
        v[begin] = v[end];
        v[end] = aux;

        do
            ++begin;
        while(v[begin] < pivot);
        do
            --end;
        while(v[end] > pivot);
    }
    
    if(k <= end)
        Sort(end + 1, k, v);
    else
        Sort(n - end - 1, k, v + end + 1);
}

uint32_t v[MAX_N];
int main() {
    FILE* fin = fopen("sdo.in", "r");
    FILE* fout = fopen("sdo.out", "w");
    
    uint32_t n, k;
    fscanf(fin, "%u%u", &n, &k);

    for(uint32_t i = 0; i < n; ++i)
        fscanf(fin, "%u", v + i);
    
    Sort(n, k, v);

    fprintf(fout, "%u\n", v[k]);

    fclose(fin);
    fclose(fout);

    return 0;
}