Cod sursa(job #3242653)

Utilizator UengineDavid Enachescu Uengine Data 12 septembrie 2024 22:01:50
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.72 kb
#include <fstream>

using namespace std;

ifstream cin("sdo.in");
ofstream cout("sdo.out");

const int VMAX = 4e6 + 1;
unsigned int v[VMAX];

int partitionare(int st, int dr){
    int pp = (rand() % (dr - st) + 1) + st;
    swap(v[pp], v[dr]);
    int p = st;
    for(int i = st; i < dr; i++){
        if(v[i] <= v[dr])
            swap(v[p++], v[i]);
    }
    swap(v[p], v[dr]);
    return p;
}

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

int main()
{
    int n, k;
    cin >> n >> k;
    for(int i = 0; i < n; i++)
        cin >> v[i];
    qs(0, n - 1, k - 1);
    cout << v[k - 1];
    return 0;
}