Cod sursa(job #2064580)

Utilizator calin9819Costea Calin calin9819 Data 12 noiembrie 2017 15:46:14
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <fstream>
#include <stdlib.h>
using namespace std;

ifstream f("sdo.in");
ofstream g("sdo.out");

int s[3000010], k;

int partitionare(int st, int dr) {
    int x = (rand() % (dr - st + 1) + rand() % (dr - st + 1) + rand() % (dr - st + 1)) / 3;
    int i = st - 1, j = dr + 1;
    int p = s[x + st];
    while (1) {
        do
            i = i + 1;
        while (s[i] < p);
        do
            j = j - 1;
        while (s[j] > p);
        if (i >= j)
            return j;
        int aux = s[i];
        s[i] = s[j];
        s[j] = aux;
    }
}


void quicksort(int st, int dr) {
    if (st < dr) {
        int p = partitionare(st, dr);
        if (p == k) return;
        if (p > k)
            quicksort(st, p);
        else if (p < k)
            quicksort(p + 1, dr);
    }
}

int main() {
    int N;
    f >> N >> k;
    for (int i = 1; i <= N; i++)
        f >> s[i];

    quicksort(1, N);
    g << s[k];
    return 0;
}