Pagini recente » Cod sursa (job #405244) | Cod sursa (job #753800) | Cod sursa (job #1001297) | Cod sursa (job #1687418) | Cod sursa (job #2972979)
#include <fstream>
using namespace std;
ifstream cin ("schi.in");
ofstream cout ("schi.out");
const int N=120005;
int v[N], arb[N], afis[N], newn=1;
int cuerry (int s,int d,int ind,int k)
{
if (ind>=newn)
{
return ind;
}
if (arb[ind*2]>=k)
{
cuerry(s, (s+d)/2, ind*2, k);
}
else
{
k-=arb[ind*2];
cuerry((s+d)/2+1, d, ind*2+1, k);
}
}
void update (int x)
{
arb[x]--;
while(x>=1)
{
x/=2;
arb[x]--;
}
return;
}
int main()
{
int n;
cin >> n;
while (newn<n)
{
newn*=2;
}
for (int i=1; i<=n; i++)
{
cin >> v[i];
arb[newn+i-1]=1;
}
for (int i=newn-1; i>=1; i--)
{
arb[i]=arb[i*2]+arb[i*2+1];
}
for (int i=n; i>=1; i--)
{
int p=cuerry(1, newn, 1, v[i]);
afis[p-newn+1]=i;
update(p);
}
for (int i=1; i<=n; i++)
{
cout << afis[i] << "\n";
}
return 0;
}