Pagini recente » Cod sursa (job #2254372) | Cod sursa (job #161635) | Cod sursa (job #487092) | Cod sursa (job #240939) | Cod sursa (job #1281328)
#include <fstream>
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
int v[4 * 30100],i, L[4 * 30100],sol[30100], n;
void build(int nod, int st, int dr, int poz, int x){
if(st == dr){
v[nod] = x;
return;
}
int m = (st + dr) / 2;
if(poz <= m)
build(2 * nod, st, m, poz, x);
else
build(2 * nod + 1, m + 1, dr, poz, x);
v[nod] = v[2 * nod] + v[2 * nod + 1];
}
void update(int nod,int st, int dr, int x){
if(st == dr){
v[nod] = 0;
sol[st] = i;
return;
}
int m = (st + dr) / 2;
if(x <= v[2 * nod])
update(2 * nod, st, m, x);
else
update(2 * nod + 1, m + 1, dr, x - v[2 * nod]);
v[nod] = v[2 * nod] + v[2 * nod + 1];
}
int main()
{
fin >> n;
for(i = 1; i <= n; i ++){
fin >> L[i];
build(1,1,n,i,1);
}
for(i = n; i >= 1; i-- )
update(1,1,n,L[i]);
for(i = 1; i <= n; i ++)
fout << sol[i] << '\n';
return 0;
}