Cod sursa(job #1449082)

Utilizator andreeadeacAndreea Ioana Deac andreeadeac Data 8 iunie 2015 18:33:13
Problema Statistici de ordine Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <fstream>
using namespace std;

ifstream in("sdo.in");
ofstream out("sdo.out");
const int N= 1000001;
int x[N], y[N],n,k,el;

inline void schimb(int &x, int &y) {
    int aux = x;
    x = y;
    y = aux;
}

void part3(int a[N], int li, int lf, int &p1, int &p2) {
    p1 = li;
    p2 = lf - 1;
    int i = li, piv = a[lf];
    while (i <= p2) {
        if (a[i] < piv)
            schimb(a[i++], a[p1++]);
        else if (a[i] > piv)
            schimb(a[i], a[p2--]);
        else
            i++;
    }
    schimb(a[lf], a[++p2]);
}

void quicksort(int a[N], int li, int lf) {
    int m1, m2;
    if(li>=lf)
        return;
    //m=pozdiv(a,li,lf);
    part3(a, li, lf, m1, m2);
    if(k<m1)
    quicksort(a, li, m1 - 1);
    if(k>m2)
    quicksort(a, m2 + 1, lf);
}

int main() {
    in>>n>>k;
    int i;
    for(i=1; i<=n; i++)
        in>>x[i];
    quicksort(x,1,n);
    out<<x[k];
    return 0;
}