Cod sursa(job #3264291)

Utilizator stefdani1Danaila Stefan-Alexandru stefdani1 Data 20 decembrie 2024 10:17:05
Problema Statistici de ordine Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>
#include <cstdlib>
#include <iostream>

using namespace std;

ifstream fin("statisticiordine.in");
ofstream fout("statisticiordine.out");

const unsigned int NMAX = 4e6;
unsigned int v[NMAX];

void part3 (unsigned int v[], int st, int dr, int &p1, int &p2) {
    p1 = st;
    p2 = dr - 1;
    int i = st;
    while (i <= p2) {
        if (v[i] < v[dr]) {
            swap (v[i], v[p1]);
            p1++;
            i++;
        } else if (v[i] > v[dr]) {
            swap(v[i], v[p2]);
            p2--;
        } else { // v[i] == v[dr]
            i++;
        }
    }
    ++p2;
    swap (v[dr], v[p2]);
}

void solo(unsigned int v[], int st, int dr, int k) {
    if (st == dr) {
        return;
    }
    int p1, p2;
    part3(v, st, dr, p1, p2);
    if (k < p1) {
        solo(v, st, p1 - 1, k);
    }
    if (k > p2) {
        solo(v, p2 + 1, dr, k);
    }
}

int main() {
    int n, k;
    fin >> n >> k;
    k--;
    for (int i = 0; i < n; i++) {
        fin >> v[i];
    }

    for (int i = n - 1; i >= 0; i--) {
        int p = rand() % (i + 1);
        swap(v[i], v[p]);
    }
    solo(v, 0, n - 1, k);
    fout << v[k];
}