Cod sursa(job #1126161)

Utilizator vlad_popaVlad Popa vlad_popa Data 26 februarie 2014 21:36:09
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <vector>
#include <fstream>
#include <algorithm>

using namespace std;

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

int sodPartition(int *elements, 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* elements, int K, int N) {
    int p = sodPartition(elements, 0, N-1);
    // fout << p << " " << elements[p] << " " << N << " " << K << "\n";
    if (p < K) return sod(&elements[p+1], K - p, N - p - 1);
    else if (p > K) return sod(&elements[0], K, p - 1);
    else return elements[p];
}

int main () {
    
    int N, K;
    vector<int> elements;
    
    fin >> N >> K;
    int t;
    for (int i = 0; i < N; ++ i) {
        fin >> t;
        elements.push_back(t);
    }
    
    fout << sod(&elements[0], K-1, N);
    
    return 0;
}