Cod sursa(job #1333811)

Utilizator andrei_bB. Andrei andrei_b Data 3 februarie 2015 16:33:35
Problema Statistici de ordine Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <fstream>
#include <ctime>
#include <cstdlib>

using namespace std;

int v[3000001];

ifstream fin("sdo.in");
ofstream fout("sdo.out");

void quick(int a , int b , int k){

    if ( b <= a ){
        fout<<v[a];
        return;
    }

    int c=(rand()%(b-a+1))+a;

    v[c]=v[b]^v[c]^(v[b]=v[c]);
    int i=a,j=b-1;
    while ( i <= j ){
        if ( v[i] <= v[b] ){ i++; continue; }
        if ( v[j] > v[b] ) { j--; continue; }
        v[i]=v[j]^v[i]^(v[j]=v[i]);
        ++i;
        --j;
    }
    v[i]=v[b]^v[i]^(v[b]=v[i]);
    if ( i == k )
        fout<<v[k];
    if ( i > k )
        quick(a,i-1,k);
    if ( i < k )
        quick(i+1,b,k);

}

int main()
{
    int n,i,x;
    fin>>n;
    fin>>x;
    for ( i=1 ; i<=n ; i++ ){
        fin>>v[i];
    }
    quick(1, n,x);

    return 0;
}