Pagini recente » Cod sursa (job #2682806) | Cod sursa (job #2948563) | Cod sursa (job #733516) | Cod sursa (job #178289) | Cod sursa (job #2129914)
#include <fstream>
#define NMAX 30001
using namespace std;
ifstream f("schi.in");
ofstream g("schi.out");
int n, x, i;
int a[NMAX], ans[NMAX], v[120011];
void build(int nod, int l, int r, int x)
{
if(l==r){
v[nod]=1;
return;
}
int m = ( l + r) / 2;
if(x<=m) build(nod * 2, l, m, x);
else build(nod * 2 + 1, m + 1, r, x);
v[nod] = v[nod * 2] + v[nod * 2 + 1];
}
void query(int nod, int l, int r, int val, int poz)
{
if(l==r){
ans[l]=poz;
v[nod]=0;
return;
}
int m = (l + r) / 2;
if(val<=v[nod*2]) query(nod * 2, l, m, val, poz);
else query(nod * 2 + 1, m + 1, r, val - v[nod * 2], poz);
v[nod]=v[nod*2]+v[nod*2+1];
}
int main()
{
f>>n;
for(i=1;i<=n;i++){
build(1,1,n,i);
f>>a[i];
}
for(i=n;i>0;i--)
query(1,1,n,a[i],i);
for(i=1;i<=n;i++)
g<<ans[i]<<'\n';
return 0;
}