Cod sursa(job #2670594)

Utilizator Fantastic_Mantudor voicu Fantastic_Man Data 10 noiembrie 2020 12:03:42
Problema Statistici de ordine Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
const int NMAX = 3e6;
int v[NMAX];
int nth_elem ( int n, int k, int v[] ) {
    int start = 0, end = n - 1, ipiv, i, j, pivot, aux;
    while ( start < end ) {
        ipiv = start + ( end - start ) / 2;
        pivot = v[ipiv];
        i = start;
        while ( v[i] < pivot )
            i++;
        j = end;
        while ( v[j] > pivot )
            j--;
        while ( i < j ) {
            aux = v[i];
            v[i] = v[j];
            v[j] = aux;
            do i++; while( v[i] < pivot);
            do j--; while( v[j] > pivot);
        }
        if ( k <= j )
            end = j;
        else
            start = j + 1;
    }
    return v[start];
}

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