Cod sursa(job #1159395)

Utilizator jul123Iulia Duta jul123 Data 29 martie 2014 16:03:08
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include<iostream>
#include<cstdio>

using namespace std;

int i, poz, suma[150000], a[100000], pos[150000];
void Modific(int nod, int left, int right)
{
        if(left==right) {
            suma[nod]=0;
            pos[left]=i;
        }
        else
        {
            int mij=(left+right)/2;
            if(poz<=suma[2*nod])
                Modific(2*nod, left, mij);
            else{
                poz=poz-suma[2*nod];
                Modific(2*nod+1, mij+1, right);}
            suma[nod]=suma[2*nod]+suma[2*nod+1];
        }
}
void Creare(int nod, int left, int right)
{
     if(left==right) {
            suma[nod]=1;
        }
        else
        {
            int mij=(left+right)/2;
            if(i<=mij)
                Creare(2*nod, left, mij);
            else
                Creare(2*nod+1, mij+1, right);
            suma[nod]=suma[2*nod]+suma[2*nod+1];
        }
}

int main()
{
    FILE *fin, *fout;
    fin=fopen("schi.in", "r");
    fout=fopen("schi.out", "w");

    int n;
    fscanf(fin, "%d", &n);
    for(i=1; i<=n; i++) {
        Creare(1,1,n);
    }
    for(i=1; i<=n; i++) {
        fscanf(fin, "%d", &a[i]);
    }
    for(i=n; i>=1; i--) {
        poz=a[i];
        Modific(1,1,n);
    }
    for(i=1; i<=n; i++)
        fprintf(fout, "%d\n", pos[i]);
}