Cod sursa(job #1825884)

Utilizator aaether14Dinescu Stefan Cristian aaether14 Data 9 decembrie 2016 20:20:16
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.42 kb
#include <fstream>
#include <algorithm>
#include <stdint.h>


int32_t n, temp, place;
int32_t tree[2000004];




void modify(int32_t node, int32_t left, int32_t right, int32_t position, int32_t value)
{

        if (left==right)
        {
                tree[node] = value;
                return;
        }
        int32_t middle = (left+right)>>1;
        if (position <= middle)
                modify(node<<1, left, middle, position, value);
        else
                modify(node<<1|1, middle+1, right, position, value);
        tree[node] = std::min(tree[node<<1], tree[node<<1|1]);

}



int32_t query(int32_t node, int32_t left, int32_t right, int32_t value)
{
        if (left==right) return left;
        int32_t middle = (left+right)>>1;
        if (value == tree[node<<1])
                return query(node<<1, left, middle, value);
        else
                return query(node<<1|1, middle+1, right, value);
}


int main()
{


        std::ifstream fin("algsort.in");
        std::ofstream fout("algsort.out");


        fin>>n;
        for (int32_t i = 1; i <= n; ++i)
        {
                fin>>temp;
                modify(1, 1, n, i, temp);
        }
        for (int32_t i = 1; i <= n; ++i)
        {
                fout<<tree[1]<<" ";
                place = query(1, 1, n, tree[1]);
                modify(1, 1, n, place, (int32_t)(1)<<32);
        }





        fin.close();
        fout.close();
        return 0;


}