Cod sursa(job #2610447)

Utilizator stanbianca611Stan Bianca stanbianca611 Data 4 mai 2020 21:22:17
Problema Statistici de ordine Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <iostream>
#include <fstream>
#include <random>
#include <ctime>
using namespace std;
ifstream f("sdo.in");
ofstream g ("sdo.out");
int v[3000005], n, k;
int pivot_rand(int st, int dr)
{
    if(st<dr)
    {
        if(dr-1==st)
        {
            if(v[st]>v[dr])
                std::swap(v[st], v[dr]);
            return st;
        }
        srand((int)time(0));
        int r=(rand()%(st-dr+1)+st);
        int p=v[r];
        std::swap(v[r], v[dr]);
        int i=st-1;
        for(int j=st; j<=dr-1; j++)
        {
            if(v[j]<p)
            {
                i++;
                std::swap(v[i], v[j]);
            }
        }
        std::swap(v[i+1], v[dr]);
        return i+1;
    }
}
void quicksort_rand(int st, int dr, int& val)
{
    if(st<dr)
    {
        int p=pivot_rand(st, dr);
        if(p==k) {val=v[p]; return;}
        if(k<p && st!=p-1)quicksort_rand(st, p-1, val);
        if(k>p && p+1!=dr)quicksort_rand(p+1, dr, val);
    }
}
int main()
{
    f>>n;
    f>>k;
    for(int i=1; i<=n; i++)
        f>>v[i];
    int val;
    quicksort_rand(1, n, val);
    g<<val;
    return 0;
}