Cod sursa(job #1463483)

Utilizator fluture.godlikeGafton Mihnea Alexandru fluture.godlike Data 21 iulie 2015 00:46:02
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <cstdio>
#include <algorithm>
#define NMAX 3000007
using namespace std;
FILE *fin, *fout;
int n, k, v[NMAX];
int Mpartition(int st, int dr)
{
    int i = st-1, j = st, mij = (st+dr)/2;
    swap(v[dr], v[mij]);
    for( ;j< dr; j++)
    {
        if(v[j] < v[dr])
        {
            i++;
            swap(v[i], v[j]);
        }
    }
    swap(v[i+1], v[dr]);
    return i+1;
}
int solve(int st, int dr, int poz)
{
    if(st == dr)
    {
        return v[st];
    }
    int poz1 = Mpartition(st, dr);
    if(poz < poz1) return solve(st, poz1-1, poz);
    if(poz > poz1) return solve(poz1 + 1, dr, poz - poz1);
    if(poz == poz1) return v[poz];
}
int main()
{
    fin = freopen("sdo.in", "r", stdin);
    fout = freopen("sdo.out", "w", stdout);
    scanf("%d %d", &n, &k);
    for(int i = 1; i<= n; i++) scanf("%d", &v[i]);
    printf("%d\n", solve(1, n, k));
    fclose(fin);
    fclose(fout);
    return 0;
}