Cod sursa(job #2277631)

Utilizator badea_adi1999Badea Adrian Catalin badea_adi1999 Data 6 noiembrie 2018 17:47:21
Problema Statistici de ordine Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <iostream>
#include <cstdio>
#include <ctime>
#include <cstdlib>
#include <algorithm>
#define nmax 3000005
using namespace std;
int n,k,v[nmax];

int part(int a[],int st,int dr)
{
    int i= st -1 , j= dr +1;
    int p=a[ st+ rand()% (dr- st + 1) ];


    while(1) {
        do {
            i++;
        } while (a[i]< p);

        do {
            j++;
        } while (a[j]> p);

        if (i>=j)
            return j;
        swap(a[i],a[j]);
    }
}
int sel(int a[], int st, int dr, int k)
{
    if (st == dr)
        return  a[st];
    int q= part(a, st, dr);
    int t= q - st +1;
    if (t >= k)
        sel(a, st, q, k);
    else
        sel(a, q+1, dr, k-t);
}
int main()
{
    freopen("sdo.in","r",stdin);
    freopen("sdo.out","w",stdout);
    srand(time(NULL));
    scanf("%d %d", &n, &k);
    for (int i = 1; i<=n; i++)
        scanf("%d", &v[i]);

    printf("%d",sel(v,1,n,k));

    return 0;
}