Cod sursa(job #2347316)

Utilizator priboiraduPriboi Radu Bogdan priboiradu Data 18 februarie 2019 17:50:31
Problema Statistici de ordine Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
//include <bits/stdc++.h>
#include <stdio.h>
#include <stdlib.h>
#include <cstdlib>

int v[3000000];
int n, k;

int ksort( int st, int dr ) {
    int i, j, pivot, aux;
    i = st;
    j = dr;
    pivot = v[ st + std::rand() % ( dr - st + 1 ) ];
    while ( i <= j ) {
        while ( i < dr && v[i] < pivot )
            i++;
        while ( st < j && pivot < v[j] )
            j--;
        if ( i <= j ) {
            aux = v[i];
            v[i] = v[j];
            v[j] = aux;
            i++;
            j--;
        }
    }
    if ( k >= i && i < dr ) {
        ksort( i, dr );
    } else if ( k <= j && st < j ) {
        ksort( st, j );
    }
}

int main() {
    FILE *fin, *fout;
    int i;
    fin = fopen( "sdo.in", "r" );
    fout = fopen( "sdo.out", "w" );
    fscanf( fin, "%d%d", &n, &k );
    k--;
    for ( i = 0; i < n; i++ )
        fscanf( fin, "%d", &v[i] );
    ksort( 0, n - 1 );
    fprintf( fout, "%d", v[k] );
    fclose( fin );
    fclose( fout );
    return 0;
}