Cod sursa(job #2438764)

Utilizator AndreiStanescuAlloys Nokito AndreiStanescu Data 13 iulie 2019 18:31:07
Problema Statistici de ordine Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include<bits/stdc++.h>
#define Nmax 3000001
using namespace std;
int G[Nmax];
int n,m,k;

int h[Nmax],tata[Nmax];

void init()
{   int i;
    ifstream fin("sdo.in");
    fin>>n>>k;
    for(i=1;i<=n;i++)
        fin>>G[i];
    fin.close();
}

void CombHeap(int i,int k)     //O(log n)
{
    int tata=i,fiu=i*2;
    int v=G[i];
    while(fiu<=k)
    {
        if(fiu<k)
            if(G[fiu]<G[fiu+1]) fiu++;
        if(v<G[fiu])
        {
            G[tata]=G[fiu];
            tata=fiu;
            fiu=fiu*2;
        }
        else fiu=k+1;
    }
    G[tata]=v;


}

void create_heap()
{
    for(int i=n/2;i;i--)
        CombHeap(i,n);
}



//sortarea are O(M log M)

int heapsort()
{
    int aux;
    create_heap();
    for(int i=n;i>k;i--)
    {
        aux=G[1];
        G[1]=G[i];
        G[i]=aux;
        CombHeap(1,i-1);
    }
    return G[1];
}


int main()
{
    long i,j,min_c,max_c,M=0,cost,t;
    i=1;
    init();
    heapsort();
    ofstream fout("sdo.out");
        fout<<heapsort()<<' ';
    fout.close();

}