Cod sursa(job #2309652)

Utilizator pasoi_stefanPasoi Stefan pasoi_stefan Data 29 decembrie 2018 15:37:15
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include<fstream>

#define Maxim (1LL<<31)-1

using namespace std;

ifstream cin("algsort.in");
ofstream cout("algsort.out");

int n,v[500005];

int Min[(2<<20)+5];

int SegmentTree(int node,int left,int right){

    if(left==right){

        Min[node]=v[left];
        return Min[node];

    }

    int middle=(left+right)/2;

    int LeftSubTree=SegmentTree(2*node,left,middle);
    int RightSubTree=SegmentTree(2*node+1,middle+1,right);

    Min[node]=min(LeftSubTree,RightSubTree);

    return Min[node];

}

void Update(int node,int left,int right,int findvalue,int value){

    if(Min[node]==findvalue){

        if(left==right){

            Min[node]=value;
            return ;

        }

        int middle=(left+right)/2;

        if(Min[2*node]==findvalue) Update(2*node,left,middle,findvalue,value);
        else if(Min[2*node+1]==findvalue) Update(2*node+1,middle+1,right,findvalue,value);

        Min[node]=min(Min[2*node],Min[2*node+1]);

        return ;

    }

}

int main(){

    cin>>n;

    for(int i=1;i<=n;i++)
        cin>>v[i];

    SegmentTree(1,1,n);

    for(int i=1;i<=n;i++){

        cout<<Min[1]<<' ';

        Update(1,1,n,Min[1],Maxim);

    }

}