Pagini recente » Cod sursa (job #3143900) | Cod sursa (job #2198410) | Cod sursa (job #2290981) | Cod sursa (job #1568434) | Cod sursa (job #2988638)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
int n;
int aint[100005], v[30005], sol[30005];
void Build(int nod, int st, int dr)
{
if(st==dr)
{
aint[nod]=1;
return;
}
int mij=(st+dr)/2;
Build(2*nod, st, mij);
Build(2*nod+1, mij+1, dr);
aint[nod]=aint[2*nod]+aint[2*nod+1];
}
int Update(int nod, int st, int dr, int x)
{
int rez;
if(st == dr)
{
aint[nod] = 0;
return st;
}
int mij = (st + dr) / 2;
if(aint[2 * nod] >= x)
rez = Update(2 * nod, st, mij, x);
else
rez = Update(2* nod + 1, mij + 1, dr, x - aint[2 * nod]);
aint[nod] --;
return rez;
}
int main()
{
fin >> n;
Build(1, 1, n);
for(int i = 1; i <= n; i ++)
fin >> v[i];
for(int i = n; i >= 1; i --)
sol[Update(1, 1, n, v[i])] = i;
for(int i = 1; i <= n; i ++)
fout << sol[i] << "\n";
return 0;
}