Pagini recente » Cod sursa (job #2285913) | Cod sursa (job #2450260) | Cod sursa (job #1878467) | Monitorul de evaluare | Cod sursa (job #1385691)
#include <fstream>
using namespace std;
ifstream f("schi.in");
ofstream g("schi.out");
int place,N,Array[30005],Partial[30005],Poz[30005],Arb[4*30005],Lazy[4*30005];
void Build(int K,int L,int R)
{
if(L>R)
return;
if(L==R)
{
Arb[K]=1;
return;
}
Build(2*K,L,(L+R)/2);
Build(2*K+1,(L+R)/2+1,R);
Arb[K]=Arb[2*K]+Arb[2*K+1];
}
void Read()
{
f>>N;
for(int i=1;i<=N;i++)
f>>Array[i];
Build(1,1,N);
}
void Query(int K,int L,int R,int x)
{
int node=K;
if(L==R)
{
place=L;
Arb[K]--;
return;
}
if(x<=Arb[2*K])
Query(K*2,L,(L+R)/2,x);
else
Query(K*2+1,(L+R)/2+1,R,x-Arb[2*K]);
Arb[K]--;
}
void Solve()
{
for(int i=N;i>=1;i--)
{
Query(1,1,N,Array[i]);
Poz[place]=i;
}
for(int i=1;i<=N;i++)
g<<Poz[i]<<"\n";
}
int main()
{
Read();
Solve();
return 0;
}