Cod sursa(job #1483373)

Utilizator ciocan_catalinCiocan Catalin - Iulian ciocan_catalin Data 9 septembrie 2015 09:32:52
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <bits/stdc++.h>

using namespace std;

int a[3000005], n, k;

void Citire()
{
    ifstream fin("sdo.in");
    fin >> n >> k;
    for (int i = 1; i <= n; i++)
        fin >> a[i];
    fin.close();
}

int Pivot(int st, int dr)
{
    int i, j, piv;
    i = st+1;
    j = dr;
    swap(a[st], a[(st+dr)/2]);
    piv = a[st];
    while (i <= j)
    {
        if (a[i] <= piv) i++;
        if (a[j] >= piv) j--;
        if (i < j && a[i] > piv && a[j] < piv)
        {
            swap(a[i], a[j]);
            i++; j--;
        }
    }
    swap(a[st], a[i-1]);
    return i - 1;
}

int Kth_Element(int st, int dr)
{
    int p;
    if (st == dr) return a[st];
    p = Pivot(st,dr);
    if (p == k) return a[p];
    if (p < k) return Kth_Element(p + 1, dr);
    return Kth_Element(st, p - 1);
}

int main()
{
    Citire();
    int v = Kth_Element(1, n);
    ofstream fout ("sdo.out");
    fout << v << "\n";
    fout.close();
    return 0;
}