Cod sursa(job #2610371)

Utilizator bogdi1bogdan bancuta bogdi1 Data 4 mai 2020 19:48:40
Problema Statistici de ordine Scor 70
Compilator cpp-32 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;
int v[3000005];
int sparg_random(int st, int dr)
{
    int pozpivot=rand()%(dr-st+1);
    int pivot=v[st+pozpivot];
    swap(v[st+pozpivot],v[dr]);
    pozpivot=st-1;
    for(int i=st; i<dr; i++)
        if(v[i]<=pivot){
            pozpivot=pozpivot+1;
            swap(v[i], v[pozpivot]);
        }
    swap(v[pozpivot+1], v[dr]);
    return pozpivot+1;
}
int aleg_random(int st, int dr, int poz)
{
    if(st==dr)
        return v[st];
    int k=sparg_random(st, dr);
    if(poz==k-st+1)
        return v[k];
    if(poz<k-st+1)
        return aleg_random(st, k-1, poz);
    else
        return aleg_random(k+1, dr, poz-(k-st+1));
}
int main()
{   freopen("sdo.in", "r", stdin);
    freopen("sdo.out", "w", stdout);
    int n,k,i;
    srand(12345678);
    scanf("%d%d", &n, &k);
    for(i=1; i<=n; i++)
        scanf("%d", &v[i]);
    printf("%d", aleg_random(1, n, k));
    return 0;
}