Pagini recente » Cod sursa (job #3326710) | Cod sursa (job #386121) | Cod sursa (job #815494) | Cod sursa (job #1763168) | Cod sursa (job #3333120)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
const int nmax = 30004;
void build(int nod, int st, int dr);
void update(int poz, int schior, int nod, int st, int dr);
int n, aint[4*nmax], v[nmax], sol[nmax];
int main()
{
fin>>n;
for(int i = 1; i <= n; ++i)
fin>>v[i];
build(1, 1, n);
for(int i = n; i >= 1; --i)
{
update(v[i], i, 1, 1, n);
}
for(int i = 1; i <= n; ++i)
fout<<sol[i]<<"\n";
return 0;
}
void build(int nod, int st, int dr)
{
if(st == dr)
{
aint[nod] = 1;
return;
}
int mijl = (st + dr) / 2;
build(2*nod, st, mijl);
build(2*nod+1, mijl+1, dr);
aint[nod] = aint[2*nod] + aint[2*nod+1];
}
void update(int poz, int schior, int nod, int st, int dr)
{
aint[nod]--;
if(st == dr)
{
sol[st] = schior;
return;
}
int mijl = (st + dr) / 2;
if(aint[2*nod] >= poz)
update(poz, schior, 2*nod, st, mijl);
else
update(poz - aint[2*nod], schior, 2*nod+1, mijl+1, dr);
}