Pagini recente » Cod sursa (job #615703) | Cod sursa (job #165272) | Cod sursa (job #1711813) | Cod sursa (job #1198993) | Cod sursa (job #2860670)
#include <fstream>
using namespace std;
ifstream fin ("schi.in");
ofstream fout ("schi.out");
int n;
int aint[120005], v[30005], sol[30005];
void init(int nod, int st, int dr)
{
if(st==dr)
{
aint[nod]=1;
return;
}
int mij = (st+dr)/2;
init (nod*2, st, mij);
init (nod*2+1, mij+1, dr);
aint[nod]=aint[2*nod]+aint[2*nod+1];
}
void update(int nod, int st, int dr, int val, int ind)
{
if(st==dr)
{
aint[nod]=0;
sol[st]=ind;
return;
}
int mij = (st+dr) / 2;
if(aint[nod*2] >= val)
update(nod*2, st, mij, val, ind);
else
update(nod*2+1, mij+1, dr, val-aint[2*nod], ind);
aint[nod]=aint[2*nod]+aint[2*nod+1];
}
int main()
{
fin>>n;
for(int i=1; i<=n; i++)
fin>>v[i];
init(1, 1, n);
for(int i=n; i>=1; i--)
update(1, 1, n, v[i], i);
for(int i=1; i<=n; i++)
fout<<sol[i]<<'\n';
return 0;
}