Cod sursa(job #1826405)

Utilizator gorneanu.andreiFMI Gorneanu Andrei gorneanu.andrei Data 10 decembrie 2016 13:38:21
Problema Sortare prin comparare Scor 80
Compilator c Status done
Runda Arhiva educationala Marime 1.24 kb
//Sortare Arbori de Intervale
#include <stdio.h>
#include <limits.h>
#define MAX 500005
int arb[MAX * 4];

int min(int a,int b){

    if(a < b)
        return a;
    return b;
}

void apdeit(int nod,int st,int dr,int poz,int val){

    if(st == dr){
        arb[nod] = val;
        return;
    }

    int mid = (st + dr) / 2;

    if(poz <= mid)
        apdeit(2 * nod,st,mid,poz,val);
    else
        apdeit(2 * nod + 1,mid + 1,dr,poz,val);

    arb[nod] = min(arb[nod * 2],arb[nod * 2 + 1]);

}

int main(){

    int n, i, v[MAX], st, dr, nod;
    FILE *f, *g;
    f = fopen("algsort.in","r");
    g = fopen("algsort.out","w");

    fscanf(f,"%d",&n);
    for(i = 1;i <= n; ++i){
        fscanf(f,"%d",&v[i]);
        apdeit(1,1,n,i,v[i]);
    }

    /*for(i=1;i<=n;i++)
    printf("%d ",arb[i]);*/

    for(i = 1;i <= n; ++i){
        fprintf(g,"%d ",arb[1]);
        st = 1;
        dr = n;
        nod = 1;
        while(st != dr){
            if(arb[nod * 2] == arb[1]){
                nod = nod * 2;
                dr = (st + dr) / 2;}
            else{
                nod = nod * 2 + 1;
                st = (st + dr) / 2 + 1;}
        }
        apdeit(1,1,n,st,INT_MAX);
    }

    return 0;
}