Cod sursa(job #2954662)

Utilizator PieleVoinescu David Piele Data 14 decembrie 2022 22:59:40
Problema Schi Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <iostream>
#include <fstream>
#include <bits/stdc++.h>
#define nmax 30005
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");

int n;
int a[nmax];
int rasp[nmax];
int arbs[4*nmax];
int arbd[4*nmax];

void pune(int nod,int st,int dr,int pos,int val)
{

    if(st==dr)
    {
        rasp[pos]=val;
        arbs[nod]=1;
        arbd[nod]=1;
        return;
    }


    int mid=(st+dr)/2;
    if(nod==1)
    {
        if(pos+arbd[nod]>mid)
            pos+=arbd[nod];
        else pos+=arbs[nod];
    }
    else if(nod&1 && arbs[nod]==1)
        pos+=arbs[nod];

    if(pos<=mid)
        pune(2*nod,st,mid,pos,val);
    else if(pos>mid)
        pune(2*nod+1,mid+1,dr,pos,val);
    arbs[nod]=arbs[2*nod];
    if(nod!=1)
    arbd[nod]=arbd[2*nod]+arbd[2*nod+1];
    else if(nod==1)
        arbd[nod]=arbd[2*nod];
}

void citire()
{
    fin>>n;
    for(int i=1;i<=n;++i)
        fin>>a[i];
    for(int i=n;i>=1;i--)
        pune(1,1,n,a[i],i);

    for(int i=1;i<=n;++i)
            fout<<rasp[i]<<"\n";
}

int main()
{citire();

    return 0;
}