Cod sursa(job #1050315)

Utilizator Iustin_BulimarFMI Iustin Bulimar Iustin_Bulimar Data 8 decembrie 2013 14:45:53
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <fstream>
#include <cmath>
using namespace std;
ifstream cin("algsort.in");
ofstream cout("algsort.out");

const int n_max=500001;
const long long mx=2147483647;

int n, i, v[n_max], m[n_max], p[n_max], l, k;

void citire()
{
    cin>>n;
    l=sqrt(n);
    k=n/l;
    if(n%l) k++;
    for(i=0; i<k; i++) m[i]=mx;
    for(i=0; i<n; i++)
    {
        cin>>v[i];
        if(v[i]<m[i/l])
        {
            m[i/l]=v[i];
            p[i/l]=i;
        }
    }
}

void afis()
{
    int i, mini=mx, pmini;
    for(i=0; i<k; i++)
        if(m[i]<mini)
        {
            mini=m[i];
            pmini=p[i];
        }
    cout<<mini<<" ";
    v[pmini]=mx;
    m[pmini/l]=mx;
    for(i=pmini/l*l; i<pmini/l*l+l && i<n; i++)
        if(v[i]<m[i/l])
        {
            m[i/l]=v[i];
            p[i/l]=i;
        }
}

int main()
{
    citire();
    for(i=0; i<n; i++) afis();
    return 0;
}