Cod sursa(job #1320568)

Utilizator YusukeFMI Mares Medar Razvan Yusuke Data 18 ianuarie 2015 02:37:48
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include<fstream>
#include<cmath>
#include<algorithm>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
long int i,vi[500005],vf[500005],n,li,le,in[1000];
void reface_minim(int poz)
{
    for(i=poz*le;i<(poz+1)*le&&i<n;i++)
        if(in[poz]>vi[i])
            in[poz]=vi[i];
}
void cauta_element(int x, int poz)
{
    in[poz]=2147483647;
    int ok=1;
    for(i=poz*le;i<(poz+1)*le&&i<n;i++)
        if (vi[i]==x&&ok)
            ok=0,vi[i]=-1;
        else
            if(in[poz]>vi[i]&&vi[i]>=0)
                in[poz]=vi[i];
}
int cauta_minim()
{
    int minim=2147483647,indmin=li;
    for(i=0;i<li;i++)
        if(in[i]<minim&&in[i]>=0)
            minim=in[i],indmin=i;
    cauta_element(minim,indmin);
    return minim;
}
int main()
{
    f>>n;
    le=sqrt(n)+1;
    li=le+!!(n-le*le);
    for(i=0;i<n;i++)
        f>>vi[i];
    for (i=0;i<1000;i++)
        in[i]=2147483647;
    for(i=0;i<n;i++)
        if(in[i/le]>vi[i])
            in[i/le]=vi[i];
    for(i=0;i<n;i++)
        vf[i]=cauta_minim();
    for(i=0;i<n;i++)
        g<<vf[i]<<' ';
}