Cod sursa(job #1556279)

Utilizator ThomasFMI Suditu Thomas Thomas Data 24 decembrie 2015 14:48:17
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <fstream>
using namespace std;
 
#define NMax 30005
#define AMax NMax*4
 
ifstream f("schi.in");
ofstream g("schi.out");
 
int n;
int v[NMax],poz[NMax];
int A[AMax];
 
void arb_search(int nr,int val,int nod,int st,int dr)
{
    A[nod]++;
 
    if(st==dr)
    {
        poz[st]=nr;
        return;
    }
 
    int mij=(st+dr)/2;
    int fiu1=nod*2,fiu2=nod*2+1;
    int cap=mij-st+1;;
 
    if(cap-A[fiu1]>=val) arb_search(nr,val,fiu1,st,mij);
    else
    {
        val-=cap-A[fiu1];
        arb_search(nr,val,fiu2,mij+1,dr);
    }
}
 
int main()
{
    int i;
 
    f>>n;
    for(i=1;i<=n;i++) f>>v[i];
 
    for(i=n;i>=1;i--) arb_search(i,v[i],1,1,n);
 
    for(i=1;i<=n;i++) g<<poz[i]<<"\n";
 
    f.close();
    g.close();
    return 0;
}