Cod sursa(job #1873169)

Utilizator Coroian_DavidCoroian David Coroian_David Data 8 februarie 2017 20:29:02
Problema Arbori indexati binar Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include <cstdio>

using namespace std;

FILE *f, *g;

int n;

struct numarul
{
    int nr;
    int bit;
};

numarul aux, v[32001];

void readFile()
{
    f = fopen("invsort.in", "r");

    fscanf(f, "%d", &n);

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

int mx;
int apMax;

bool sorted()
{
    int i;
    for(i = 1; i < n; i ++)
    {
        if(v[i].nr > v[i + 1].nr)
            return 0;
    }

    return 1;
}

inline int mxa(int a, int b)
{
    return (a > b ? a : b);
}

void invSort(int st, int dr)
{
    if(st >= dr)
        return;

    if(st == dr - 1)
    {
        //printf("%d %d\n", st, dr);

       // printf("%d %d\n", v[st].nr, v[dr].nr);

        if(v[st].nr > v[dr].nr)
        {
            aux = v[st];
            v[st] = v[dr];
            v[dr] = aux;

            fprintf(g, "%d %d\n", st, dr);
        }
    }

    int mid = (st + dr) / 2;

    invSort(st, mid);
    invSort(st + 1, mid);
    invSort(mid, dr - 1);
    invSort(mid + 1, dr);
}

void solve()
{
    //while(sorted() == 0)
        invSort(1, n);
        invSort(1, n);
        invSort(1, n);
        invSort(1, n);
        invSort(1, n);
}

int main()
{
    readFile();

    g = fopen("invsort.out", "w");

    solve();

    fclose(g);

    return 0;
}