Pagini recente » Cod sursa (job #63096) | Cod sursa (job #2621297) | Cod sursa (job #658100) | Cod sursa (job #224112) | Cod sursa (job #3267106)
#include <bits/stdc++.h>
using namespace std;
ifstream f("schi.in");
ofstream g("schi.out");
int n,a[30005];
int aib[30005],sol[30005];
int query(int i)
{
int sum=0;
while ( i>0 )
{
sum+=aib[i];
i-=(i&-i);
}
return sum;
}
void update(int i, int val)
{
while ( i<=n )
{
aib[i]+=val;
i+=(i&-i);
}
}
int cb(int val)
{
int st=1,dr=n;
int poz=-1;
while ( st<=dr )
{
int m=(st+dr)/2;
if ( query(m)==val )
{
poz=m;
dr=m-1;
}
else if ( query(m)<val )
st=m+1;
else
dr=m-1;
}
return poz;
}
int main()
{
f >> n;
for (int i=1; i<=n; i++ )
{
f >> a[i];
update(i,1);
}
for (int i=n; i>=1; i-- )
{
int poz=cb(a[i]);
sol[poz]=i;
update(poz,-1);
}
for (int i=1; i<=n; i++ )
g << sol[i] << '\n';
return 0;
}