Pagini recente » Cod sursa (job #1900898) | Cod sursa (job #1668879) | Cod sursa (job #2521550) | Cod sursa (job #1464897) | Cod sursa (job #355859)
Cod sursa(job #355859)
#include <cstdio>
#define ARB 32770 //2^15+2
#define N 30001
int arb[ARB];
void construire(int st, int dr, int poz)
{
arb [poz] = dr - st + 1;
if (st == dr)
return;
int mij = (st + dr)/2;
construire(st,mij, 2*poz);
construire(mij+1,dr, 2*poz+1);
}
int interogare(int st, int dr, int poz, int val)
{
arb [poz] -= 1;
if (st == dr)
return st;
int mij = (st+dr)/2;
if (arb [2*poz] >= val)
return interogare(st,mij,2*poz,val);
val -= arb [2*poz];
return interogare(mij+1,dr,2*poz+1,val);
}
int main()
{
int n,poz[N]={0},raspuns[N]={0};
freopen ("schi.in","r",stdin);
freopen ("schi.out","w",stdout);
scanf ("%d",&n);
construire(1,n,1);
for (int i = 1; i <= n; ++i)
scanf ("%d",&poz[i]);
for (int i = n; i >= 1; --i)
{
raspuns [interogare (1,n,1,poz[i])] = i;
}
for (int i = 1; i <= n; ++i)
printf ("%d\n",raspuns[i]);
return 0;
}