Cod sursa(job #1045004)

Utilizator jul123Iulia Duta jul123 Data 30 noiembrie 2013 18:56:09
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.59 kb
#include<iostream>
#include<cstdio>
#define MAX 2147483640
using namespace std;

int minim[1000001], mini=MAX, x, pos, si, sf, v[1000000], mnod, poz[1000000], ig;
void Inserare(int nod, int left, int right)
{
    if(left==right)
        {minim[nod]=x;
        poz[nod]=ig;}
    else
    {
        int mij=(left+right)/2;
        if(pos<=mij)
            Inserare(2*nod, left, mij);
        else
            Inserare(2*nod+1, mij+1, right);
    if(minim[2*nod]<minim[2*nod+1])
        {
            minim[nod]=minim[2*nod];
            poz[nod]=poz[2*nod];
        }
    else
    {
        minim[nod]=minim[2*nod+1];
        poz[nod]=poz[2*nod+1];
    }
    }
}
void Interval(int nod, int left, int right)
{
    if(si <= left && right <= sf)
    {
        if(minim[nod]<mini)
            {mini=minim[nod];
            mnod=poz[nod];
            }
    }
    else
    {
        int mij=(left+right)/2;
        if(si <= mij)
            Interval(2*nod, left, mij);
        if(mij+1<=sf)
            Interval(2*nod+1, mij+1, right);
    }
}
int main()
{
    FILE *fin, *fout;
    fin=fopen("algsort.in","r");
    fout=fopen("algsort.out","w");

    int i, n, st, dr;
    fscanf(fin, "%d", &n);
    for(ig=1; ig<=n; ig++)
    {
        fscanf(fin, "%d", &v[ig]);
        x=v[ig];
        pos=ig;
        Inserare(1,1,n);
    }
    for(int ii=0; ii<n; ii++)
    {si=1;
    sf=n;
    Interval(1, 1,n);
    fprintf(fout, "%d ", mini);
    x=MAX;
    pos=mnod;
    ig=pos;
    Inserare(1,1,n);
    /*x=mini;
    pos=n-ii;
    ig=pos;*/
    mini=MAX;}

}