Cod sursa(job #1105205)

Utilizator s1mpMihai Alexandru s1mp Data 11 februarie 2014 16:27:30
Problema Statistici de ordine Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include<iostream>
#include<fstream>
 
#define Nmax 3000001
 
using namespace std;
 
int M[Nmax];
 
int QuickSelect(long p, long u, long K) {
    int pivot = M[rand() % (u - p + 1) + p];
    int i = p;
    int j = u;
    while (i <= j) {
        while (M[i] < pivot) {
            i++;
        }
        while (M[j] > pivot) {
            j--;
        }
        if (i <= j) {
            swap(M[i], M[j]);
            i++;
            j--;
        }
    }
    if (i > K) {
        return QuickSelect(p,i-1,K);
    } else if (i < K) {
        return QuickSelect(i+1,u,K);
    } else {
        return M[i];
    }
}
 
int main() {
    ifstream f("sdo.in");
    ofstream g("sdo.out");
    int N,K;
    f>>N;
    f>>K;
    for(int i = 1; i <= N; i++) {
        f>>M[i];
    }
    g<<QuickSelect(1,N,K);
    f.close();
    g.close();
    return 0;
}