Cod sursa(job #1310216)

Utilizator diana-t95FMI Tudoreanu Diana Elena diana-t95 Data 6 ianuarie 2015 16:34:49
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <iostream>
#include<fstream>
#include<cmath>
#include<algorithm>
#include<vector>
using namespace std;
#define maxn 500001
#define maxli 1000
#define MAX 2147483648
int vi[maxn], vf[maxn], n;
int li, le, in[maxli];
void reface_minim(int poz)
{
    for (int i=poz*le; i<(poz+1)*le; i++)
        if (in[poz]>vi[i]) in[poz]=vi[i];
}
void cauta_element(int x, int poz)
{
    for (int i=poz*le; i<(poz+1)*le; i++)
        if (vi[i]==x) {
            vi[i]=MAX;
            in[poz]=MAX;
            reface_minim(poz);
            return;
            }
}
int cauta_minim()
{
    int i, minim=MAX, indmin;
    for (i=0;i<li;i++)
        if (in[i]<minim) {minim=in[i]; indmin=i;}
    cauta_element(minim, indmin);
    return minim;
}
int main()
{
    ifstream f("algsort.in");
    ofstream g("algsort.out");
    int i;
    f>>n;
    le=sqrt(n);
    li=le+!!(n-le*le);
    for (i=0;i<n;i++) f>>vi[i];
    for (i=0;i<maxli;i++) in[i]=MAX;
    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]<<' ';
}