Pagini recente » Cod sursa (job #414850) | Cod sursa (job #2949218) | Cod sursa (job #2837644) | Cod sursa (job #1695895) | Cod sursa (job #2846158)
#include<fstream>
using namespace std;
ifstream cin("schi.in");
ofstream cout("schi.out");
int sol[30002],aib[30002],v[30002],n;
void update(int poz,int x)
{
while(poz<=n)
{
aib[poz]+=x;
poz+=(poz&(-poz));
}
}
int ras(int poz)
{
int ans=0;
while(poz>0)
{
ans+=aib[poz];
poz-=(poz&(-poz));
}
return ans;
}
int cautare(int x)
{
int st=1,dr=n;
while(st<=dr)
{
int mij=(st+dr)/2;
if(ras(mij)<x)
st=mij+1;
else
dr=mij-1;
}
return st;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>v[i];
update(i,1);
}
for(int i=n;i>=1;i--)
{
int k=cautare(v[i]);
sol[k]=i;
update(k,-1);
}
for(int i=1;i<=n;i++)
cout<<sol[i]<<'\n';
}