Cod sursa(job #1016151)

Utilizator dan.ghitaDan Ghita dan.ghita Data 25 octombrie 2013 20:44:31
Problema Statistici de ordine Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <iostream>
#include<fstream>
#include<cstdlib>
#include<ctime>
#include<algorithm>
using namespace std;
ifstream f("sdo.in");
ofstream g("sdo.out");
long long v[3000005], x;
int n, k, p;

long long poz(int s, int d){
while ( s <= d ) {
        while ( v[s] < v[p] )
            ++s;
        while ( v[d] > v[p] )
            --d;

        if ( s <= d ) {
            swap( v[s], v[d] );
            ++s;
            --d;
        }
    }

return d;
}


void sdo(int a, int b) {
    if (a<b){
    int p=(a+b)/2, s=a, d=b;

    while ( s <= d ) {
        while (v[s]<v[p])
            ++s;
        while (v[d]>v[p])
            --d;

        if (s<=d) {
            swap( v[s], v[d] );
            ++s;
            --d;
        }
    }

    //if(k==d) {g<<v[k]<<'\n'; cout<<v[k]; return;} else
    if (k<=d) sdo(a,d);
    else sdo(s,b);
}
}

int main()
{
    f>>n>>k;
    for(int i=1; i<=n; ++i){
       f>>v[i];
    }
    sdo(1, n);
    g<<v[k]<<'\n'; cout<<v[k];
    g.close();
    return 0;
}