Cod sursa(job #1039282)

Utilizator Dayanna000Amegica Dayanna Dayanna000 Data 22 noiembrie 2013 19:20:55
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.39 kb
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
#define inf 4294967296
int main()
{
    ifstream f("algsort.in");
    ofstream g("algsort.out");
    long long n,a[500001],b[800],i,j,huh,s,nr,gal,mini,k;
    f>>n;
    s=(int)sqrt(n);
    nr=n/s;
    k=1;
    for(i=1;i<=nr;++i)
      {mini=inf;
      for(j=1;j<=s;j++)
        {   f>>a[k];
            if(a[k]<mini)
              mini=a[k];
            k++;  }
        b[i]=mini;}
    if(nr*s!=n)
      for(i=nr*s+1;i<=n;i++)
        {   f>>a[k];
            if(a[k]<b[nr])
               b[nr]=a[k];
            k++; }
    mini=inf-1;
    while(mini!=inf)
      {
          for(i=1;i<=nr;i++)
            if(b[i]<mini)
              {   mini=b[i];
                  gal=i;  }
          if(mini!=inf)
            {   g<<mini<<" ";
                if(gal==nr)
                  huh=n;
                  else
                  huh=gal*s;
                b[gal]=inf;
                int ok=1;
                for(i=(gal-1)*s+1;i<=huh;i++)
                  {   if(a[i]==mini && ok==1)
                        { a[i]=inf; ok=0; }
                      if(a[i]<b[gal])
                         b[gal]=a[i];  }
                mini=b[gal];
                for(i=1;i<=nr;i++)
                   if(b[i]<mini)
                     {  mini=b[i];
                        gal=i;  }

            }
      }
    f.close();
    g.close();
    return 0;
}