Cod sursa(job #2301203)

Utilizator stefzahZaharia Stefan Tudor stefzah Data 12 decembrie 2018 19:02:22
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <fstream>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int aint[1100005],n,m,i,p,a,b,v[500005],k,q,ct,poz;
void update(int a,int b)
    {int t;
     t=k+a-1;
     v[a]=b;
     t=t/2;
     while(t!=0)
          {if(v[aint[t*2]]<v[aint[t*2+1]])aint[t]=aint[t*2];
            else aint[t]=aint[t*2+1];
           t=t/2;
          }
    }
int main()
{fin>>n;
 for(i=1;i<=n;i++)
    {fin>>v[i];
    }
    k=1;
 while(k<n)
      k=k*2;
 for(i=k;i<k+n;i++)
    {aint[i]=i-k+1;
    }
 for(i=k+n;i<k+k;i++)
    aint[i]=0;
 v[0]=(1<<31)-1;
 for(i=k-1;i>=1;i--)
    {if(v[aint[i*2]]<v[aint[i*2+1]])aint[i]=aint[i*2];
     else aint[i]=aint[i*2+1];
    }
    q=1;
    ct=0;
 for(i=1;i<k+n;i++)
    {ct++;
     if(ct==q){ct=0;q=q*2;}
    }
 for(i=1;i<=n;i++)
    {//fout<<aint[1]<<"* ";
     fout<<v[aint[1]]<<" ";
     update(aint[1],(1<<31)-1);
    }
}