Cod sursa(job #1276096)

Utilizator sing_exFMIGhita Tudor sing_ex Data 25 noiembrie 2014 22:25:37
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <fstream>
#include <stdlib.h>

using namespace std;

int v[3000000];

int part(int l, int r) {
    int p = rand()%(r-l) + l;
    int i,x,pos,value;
    value = v[p];
    x = v[p];
    v[p] = v[r];
    v[r] = x;
    pos = l;
    for (i=l;i<r;i++) {
        if (v[i] < value) {
            x = v[i];
            v[i] = v[pos];
            v[pos] = x;
            pos++;
        }
    }
    x = v[pos];
    v[pos] = v[r];
    v[r] = x;
    return pos;
}

void pivot (int l, int r, int k) {
    if (l == r || l > r) return;
    int p = part(l,r);
    if (k > p) pivot(p+1,r,k);
    if (k <= p) pivot(l,p-1,k);
}


int main()
{
    int n,k,i;
    ifstream f("sdo.in");
    f>>n;
    f>>k;
    for (i=0;i<n;i++) f>>v[i];
    f.close();
    pivot(0,n-1,k);
    ofstream g("sdo.out");
    g<<v[k-1];
    g.close();
    return 0;
}