Pagini recente » Cod sursa (job #437184) | Cod sursa (job #1568204) | Cod sursa (job #917476) | Cod sursa (job #799737) | Cod sursa (job #2823547)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("schi.in");
ofstream fout("schi.out");
int n,v[30002],pw=1,sol[30002],w[30002];
void update (int poz, int val)
{
for (int i=poz;i<=n;i=i+(i&-i))
v[i]=v[i]+val;
}
int cb (int s)
{
bool ok=0;
int poz=0,pas=pw;
while (pas!=0)
{
if (v[pas+poz]==s)
ok=1;
if (v[pas+poz]<s)
{
s-=v[pas+poz];
poz+=pas;
}
pas/=2;
while(pas>=1&&pas+poz>n)
pas/=2;
}
if (ok)
return poz+1;
else
return -1;
}
int main()
{
int i,x;
fin>>n;
for (i=1;i<=n;i++)
{
update (i,1);
fin>>w[i];
}
while (pw<=n)
pw*=2;
pw/=2;
for (i=n;i>0;i--)
{
x=cb(w[i]);
sol[x]=i;
update(x,-1);
}
for (i=1;i<=n;i++)
fout<<sol[i]<<'\n';
return 0;
}