Pagini recente » Cod sursa (job #2305814) | Cod sursa (job #875834) | Cod sursa (job #888673) | Cod sursa (job #2280361) | Cod sursa (job #1310225)
#include <iostream>
#include<fstream>
#include<cmath>
#include<algorithm>
#include<vector>
using namespace std;
#define maxn 500001
#define maxli 1000
#define M 2147483647
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]=M;
in[poz]=M;
reface_minim(poz);
return;
}
}
int cauta_minim()
{
int i, minim=M, 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]=M;
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]<<' ';
}