Cod sursa(job #1283090)

Utilizator deresurobertoFMI - Deresu Roberto deresuroberto Data 5 decembrie 2014 02:08:48
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.37 kb
//Deresu Roberto - FMI
//Re :)
#include<fstream>
#include<algorithm>
#include<climits>
#define sz 707
#define nx 500007
using namespace std;
int n,m,poz,k,a[nx],c[nx];

struct asd
{
    int val, poz;
}b[sz+7];

ifstream fin("algsort.in");
ofstream fout("algsort.out");

int cauta_minim()
{
    int m, poz;

    m = INT_MAX;
    poz = 0;

    for(int i=1;i<=k;i++)
        if(b[i].val < m)
        {
            m = b[i].val;
            poz = i;
        }

    return poz;
}

void actualizeaza_minim(int poz)
{
    int l,r;

    b[poz].val = INT_MAX;
    l = (poz-1)*sz+1;
    r = min(poz*sz,n);

    for(int i=l;i<=r;i++)
        if(a[i] < b[poz].val)
        {
            b[poz].val = a[i];
            b[poz].poz = i;
        }
}

int main()
{
    fin>>n;

    for(int i=1;i<=n;i++)
    {
        fin>>a[i];

        if(i > k*sz)
        {
            b[k].val = m;
            b[k].poz = poz;

            ++k;
            m = INT_MAX;
        }

        if(a[i] < m)
        {
            m = a[i];
            poz = i;
        }
    }

    b[k].val = m;
    b[k].poz = poz;

    for(int i=1;i<=n;i++)
    {
        int poz = cauta_minim();

        c[i] = b[poz].val;
        a[b[poz].poz] = INT_MAX;

        actualizeaza_minim(poz);
    }

    for(int i=1;i<=n;i++)
        fout<<c[i]<<" ";

	return 0;
}