Cod sursa(job #2341697)

Utilizator IoanStoicaStoica Ioan IoanStoica Data 12 februarie 2019 09:50:29
Problema Sortare prin comparare Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <bits/stdc++.h>
#define k 500002
#define ll unsigned long long
using namespace std;



ll v[k],aux[k];
void sortare(ll in[],ll fin[],int a,int b,int bit)
{
    if(a==b)fin[a]=in[a];
    if(a>=b || bit<0)return ;
    int st=a-1,dr=b+1,i;
    for(i=a;i<=b;i++)
        if( (1<<bit) & in[i] )
            fin[--dr]=in[i];
        else fin[++st]=in[i];
    sortare(fin,in,a,st,bit-1);
    sortare(fin,in,dr,b,bit-1);
}
char a[k*100],b[k*100];

int main()
{
    fstream f("algsort.in",ios::in);
    fstream g("algsort.out",ios::out);
    int n;
    int bit;
    ll m=0;
    f>>n;
    for(int i=1;i<=n;i++)
    {
        f>>v[i];
        m=max(m,v[i]);
    }
    for(bit=0;;bit++)
        if(1<<(bit+1)> m)
            break;
    sortare(v,aux,1,n,bit);
    for(int i=1;i<=n;i++)
        g<<v[i]<<" ";
    f.close();
    g.close();
    /*f.open("grader_test5.ok",ios::in);
    g.open("algsort.out",ios::in);

    f.getline(a,k);cout<<"new"<<a<<endl;
    g.getline(b,k);cout<<"new"<<b<<endl;
    for(int i=0;i<=strlen(a);i++)
        if(a[i]!=b[i])
            cout<<i<<endl;

    cout<<strcmp(a,b);*/
}