Cod sursa(job #1790000)

Utilizator robx12lnLinca Robert robx12ln Data 27 octombrie 2016 18:02:26
Problema Statistici de ordine Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<ctime>
using namespace std;
FILE * fin = fopen("sdo.in","r");
FILE * fout = fopen("sdo.out","w");
int n, k, v[3000005];
int poz( int st, int dr ){
    int i = 0;
    int j = -1;
    while( st < dr ){
        if( v[st] > v[dr] ){
            swap( v[st], v[dr] );
            int aux = i;
            i = -j;
            j = -aux;
        }
        st += i;
        dr += j;
    }
    return st;
}
int sdo( int st, int dr ){
    if( st < dr ){
        int p = poz( st, dr );
        if( p == k ){
            return p;
        }else{
            if( k < p ){
                sdo( st, p );
            }else{
                sdo( p + 1, dr );
            }
        }
    }
}
int main(){
    fscanf( fin, "%d%d", &n, &k );
    for( int i = 1; i <= n; i++ ){
        fscanf( fin, "%d", &v[i] );
    }
    srand( time(0) );
    for( int i = 2; i <= n; i++ ){
        int p = rand() % (i - 1) + 1;
        swap( v[p], v[1] );
    }
    int p = sdo( 1, n );
    fprintf( fout, "%d", v[p] );
    return 0;
}