Pagini recente » Cod sursa (job #1051630) | Cod sursa (job #211255) | Cod sursa (job #2950334) | Cod sursa (job #983005) | Cod sursa (job #1764872)
#include<bits/stdc++.h>
using namespace std;
int v[66666],L[30666],b[30666] ,i,n;
void actualizare(int nod ,int st ,int dr ,int a ,int b)
{
if ( st == dr )
{
v[nod] = b;
return;
}else
{
int mijloc = (st + dr)/2;
if ( a <= mijloc )
actualizare(2 * nod , st , mijloc , a , b);
else
actualizare(2*nod + 1 , mijloc + 1 , dr , a , b );
v[nod] = v[ 2*nod ] + v[ 2*nod+1 ];
}
}
void interogare(int nod , int st , int dr ,int a)
{
if ( st == dr )
{
v[nod] = 0;
L[st] = i;
return;
}else
{
int mijloc = (st + dr)/2;
if( a <= v[ 2*nod ])
interogare( 2 * nod , st , mijloc , a);
else
interogare( 2 * nod + 1, mijloc + 1 , dr ,a - v[2*nod]);
v[nod] = v[ 2*nod ] + v[ 2*nod +1 ];
}
}
int main()
{
ifstream in("schi.in");
ofstream out("schi.out");
in>>n;
for ( i = 1; i <= n ; i++)
{
in>>b[i];
actualizare( 1 , 1 , n, i , 1);
}
for( i = n; i >= 1; i--)
{
interogare(1 , 1 , n , b[i]);
}
for( i = 1 ; i <= n ; i++)
out<<L[i]<<'\n';
return 0;
}