Pagini recente » Cod sursa (job #550763) | Cod sursa (job #3355058) | Cod sursa (job #1479629) | Cod sursa (job #1612915) | Cod sursa (job #3304737)
#include <fstream>
using namespace std;
ifstream in("schi.in");
ofstream out("schi.out");
int n;
int v[30005];
int aib[30005];
int ans[30005];
void update(int poz, int val)
{
for(int i = poz; i<=n; i+=(i&-i))
{
aib[i] += val;
}
}
int cauta(int x)
{
int poz = 0;
int sum = 0;
for(int bit = 18; bit>=0; bit--)
{
if(poz + (1 << bit) <= n && sum + aib[poz + (1 << bit)] < x)
{
sum += aib[poz + (1 << bit)];
poz += (1 << bit);
}
}
return poz + 1;
}
int main()
{
in>>n;
for(int i = 1; i<=n; i++)
{
in>>v[i];
update(i, 1);
}
for(int i = n; i>=1; i--)
{
int poz = cauta(v[i]);
ans[poz] = i;
update(poz, -1);
}
for(int i = 1; i<=n; i++)
{
out<<ans[i]<<'\n';
}
return 0;
}