Pagini recente » Cod sursa (job #375039) | Cod sursa (job #533693) | Cod sursa (job #990034) | Cod sursa (job #2483966) | Cod sursa (job #2829647)
#include <fstream>
using namespace std;
ifstream cin("schi.in");
ofstream cout("schi.out");
const int N=30011;
int n,aib[N],v[N],vrez[N];
void adaug(int nod,int val)
{
int i;
for(i=nod;i<=n;i+=(i&(-i)))
aib[i]+=val;
}
int f2(int nod)
{
int s=0;
for(int i=nod;i>0;i-=(i&(-i)))
s+=aib[i];
return s;
}
int f(int i)
{
int st=1,dr=n,mij,s,poz=1000000;
while(st<=dr)
{
mij=(st+dr)/2;
s=f2(mij);
if(s==i)
poz=min(poz,mij);
if(s>=i)
dr=mij-1;
else
st=mij+1;
}
return poz;
}
int main()
{
int i,a,x;
cin>>n;
for(i=1;i<=n;i++)
{
adaug(i,1);
}
for(i=1;i<=n;i++)
{
cin>>v[i];
}
for(i=n;i>0;i--)
{
x=f(v[i]);
vrez[x]=i;
adaug(x,-1);
}
for(i=1;i<=n;i++)
cout<<vrez[i]<<'\n';
return 0;
}