Cod sursa(job #2620660)

Utilizator CoakazeRotaru Catalin Coakaze Data 29 mai 2020 14:02:17
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>
#include <fstream>
#include <time.h>
using namespace std;
int n, k, v[3000001], rez;
int pozitie(int v[], int st, int dr)
{
    srand(time(NULL));
    int random = st + rand() % (dr - st + 1);
    swap(v[random], v[dr]);
    int pivot = v[dr];
    int i = (st - 1);
    for(int j=st; j<=dr - 1; j++)
    {
        if(v[j] <= pivot)
        {
            i++;
            swap(v[i], v[j]);
        }
    }
    swap(v[i + 1], v[dr]);
    return (i + 1);
}

int quick_select(int v[], int st, int dr, int k)
{
    if (k > 0)
    {
        int pivot = pozitie(v, st, dr);
        if (pivot - st == k - 1)
            return v[pivot];
        if (pivot - st > k - 1)
            return quick_select(v, st, pivot - 1, k);
        else
            return quick_select(v, pivot + 1, dr, k - pivot + st - 1);
    }
}

int main()
{
    ifstream f("sdo.in");
    ofstream g("sdo.out");
    f>>n>>k;
    int i;
    for(i=0; i<n; i++)
        f>>v[i];
    g<<quick_select(v, 0, n-1, k);
    return 0;
}