Cod sursa(job #393857)

Utilizator alexandru92alexandru alexandru92 Data 10 februarie 2010 08:23:32
Problema Statistici de ordine Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
/* 
 * File:   main.cpp
 * Author: virtualdemon
 *
 * Created on February 9, 2010, 7:25 PM
 */
#include <fstream>
#include <iterator>
#define Nmax 3000001

/*
 *
 */
using namespace std;
int N;
int Heap[Nmax];
inline void swap( int& x, int& y )
{
    int aux=x;
    x=y;
    y=aux;
}
void DownHeap( int k )
{
    int son;
    while( true )
    {
        son=2*k;
        if( son > N )
            return;
        if( son < N && Heap[son] > Heap[son+1] )
            ++son;
        if( Heap[son] >= Heap[k] )
            return;
        swap( Heap[son], Heap[k] );
        k=son;
    }
}
int main( void )
{
    int k, i;
    ifstream in("sdo.in");
    in>>N>>k;
    copy( istream_iterator<int>(in), istream_iterator<int>(), Heap+1 );
    for( i=N/2; i > 0; --i )
        DownHeap( i );
    for( ; k; --k )
    {
        i=Heap[1];
        Heap[1]=Heap[N];
        --N;
        DownHeap(1);
    }
    ofstream out("sdo.out");
    out<<i;
    return 0;
}