Cod sursa(job #2337850)

Utilizator andreisontea01Andrei Sontea andreisontea01 Data 6 februarie 2019 19:12:24
Problema Statistici de ordine Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <bits/stdc++.h>

using namespace std;

const int MAXN = 3000005;

int v[MAXN];
int n;

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 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;
}