Cod sursa(job #654818)

Utilizator slycerdan dragomir slycer Data 30 decembrie 2011 22:56:02
Problema Statistici de ordine Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
/* 
 * File:   Statisticideordine.cpp
 * Author: slycer
 *
 * Created on December 30, 2011, 10:35 PM
 */

#include <cstdlib>
#include <fstream>

using namespace std;

void swap( int *,int,int);
/*
 * 
 */
int main(int argc, char** argv) {

    ifstream input("sdo.in");
    ofstream output("sdo.out");
    int n,k;
    input >> n >> k; 
    int *data = new int[n];
    for ( int i=0; i<n; i++){
        int c;
        input >> c; 
        data[i] = c; 
    }
    k--;
    int left=0; 
    int right=n-1; 
    int m; 
    while ( true ){
        m = (right+left)/2;
        swap(data,left,m);
        m=left; 
        for ( int j=left+1; j<=right; j++ ){
            if ( data[left]>data[j] ){
                m++;
                swap(data,m,j);    
            }
        }
        swap(left,m);
        if ( m == k ){
            break;
        }
        if ( k < m ){
            right = m-1; 
        } else {
            left = m+1; 
        }
        
    }
    output << data[m];
    return 0;
}

void swap( int *data, int i, int j){
    int aux = data[i]; 
    data[i] = data[j]; 
    data[j] = aux; 
}