Cod sursa(job #1126201)

Utilizator vlad_popaVlad Popa vlad_popa Data 26 februarie 2014 21:52:53
Problema Statistici de ordine Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <vector>
#include <fstream>
#include <algorithm>

using namespace std;

ifstream fin ("sdo.in");
ofstream fout ("sdo.out");

#define MAXN 3000010

int N, K;
int elements[MAXN];

int sodPartition(int left, int right) {
    int verif = 1;
    
    while (left < right) {
        if (elements[left] > elements[right]) {
            swap(elements[left], elements[right]);
            verif = -verif;
        }
        
        (verif == 1) ? ++left : --right;
    }
    
    return left;
}

int sod (int K, int left, int right) {
    int p = sodPartition(left, right);
    //fout << p << " " << elements[p] << " " << N << " " << K << "\n";

    if (p < K) return sod(K, p + 1, right);
    else if (p > K) return sod(K, left, p - 1);
    else return elements[p];
}

int main () {
    fin >> N >> K;
    for (int i = 0; i < N; ++ i) {
        fin >> elements[i];
    }
    
    fout << sod(K-1, 0, N-1) << "\n";
    
    return 0;
}