Cod sursa(job #609327)

Utilizator tzipleatudTudor Tiplea tzipleatud Data 20 august 2011 18:35:36
Problema Statistici de ordine Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <fstream>
#include <ctime>
#include <cstdlib>

using namespace std;

ifstream f("sdo.in");
ofstream g("sdo.out");

int a[3000010],n,i,k;

int part(int a[3000010],int st, int sf) {
    int i=st,j=sf,p=a[st+(rand()%(sf-st+1))];
    while (1) {
        while (a[i]<p) i++;
        while (a[j]>p) j--;
        if (i<j) swap(a[i],a[j]);
        else return j;
    }
    return 0;
}

void alg_sdo(int a[3000010],int st,int sf,int k) {
    if (st==sf) return;
    int q=part(a,st,sf);
    int t=q-st+1;
    if (t>=k) alg_sdo(a,st,q,k);
        else  alg_sdo(a,q+1,sf,k-t);
}
int main() {
    srand(time(NULL));
    f >> n >> k;
    for (i=1;i<=n;i++) f >> a[i];
    alg_sdo(a,1,n,k);
    g << a[k] << '\n';
    f.close();g.close();
    return 0;
}