Cod sursa(job #2416779)

Utilizator andreisontea01Andrei Sontea andreisontea01 Data 28 aprilie 2019 10:56:04
Problema Statistici de ordine Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.79 kb
#include <bits/stdc++.h>

using namespace std;

int v[3000005];

int partit(int st, int dr){
    int piv = v[(st + dr) / 2];
    int l = st - 1, h = dr + 1;
    while(1){
        l++;
        while(v[l] < piv) l++;
        h--;
        while(v[h] > piv) h--;
        if(l < h) swap(v[l], v[h]);
        else return h;
    }
}

int main()
{
    ifstream fin("sdo.in");
    ofstream fout("sdo.out");
    int n, k;
    fin >> n >> k;
    for(int i = 1; i <= n; ++i)
        fin >> v[i];
    int st = 1, dr = n, dist = 0, stat = 0, dk = k;
    while(st < dr){
        stat = partit(st, dr);
        dist = stat - st + 1;
        if(dist >= dk) dr = stat;
        else{
            st = stat + 1;
            dk -= dist;
        }
    }
    fout << v[k];
    return 0;
}