Pagini recente » Cod sursa (job #3221561) | Cod sursa (job #93184) | Cod sursa (job #740993) | Cod sursa (job #947776) | Cod sursa (job #2811106)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
int n;
int a[30005],sol[30005],aib[30005];
int sum(int p)
{
int res=0;
while(p>0)
{
res+=aib[p];
p-=(p&(-p));
}
return res;
}
void update(int p,int d)
{
while(p<=n)
{
aib[p]+=d;
p+=(p&(-p));
}
}
int cb(int x)
{
int st=1,dr=n,mij,p=-1;
while(st<=dr)
{
mij=(st+dr)/2;
int aux=sum(mij);
if(aux==x)
{
p=mij;
dr=mij-1;
}
else if(aux<x)
st=mij+1;
else
dr=mij-1;
}
return p;
}
int main()
{
fin>>n;
int i;
for(i=1; i<=n; i++)
fin>>a[i];
for(i=1; i<=n; i++)
update(i,1);
for(i=n; i>=1; i--)
{
int aux=cb(a[i]);
sol[aux]=i;
update(aux,-1);
}
for(i=1; i<=n; i++)
fout<<sol[i]<<"\n";
return 0;
}