Pagini recente » Cod sursa (job #2093101) | Cod sursa (job #2244907) | Cod sursa (job #997608) | Cod sursa (job #2871678) | Cod sursa (job #679185)
Cod sursa(job #679185)
#include <cstdio>
#include <algorithm>
#define infile "schi.in"
#define outfile "schi.out"
#define n_max 30005
#define zeros(x) ((x^(x-1))&x)
using namespace std;
int AIB[n_max];
int a[n_max], Sol[n_max];
int N;
void citeste()
{
freopen(infile, "r", stdin);
scanf("%d",&N);
for(int i=1; i<=N; ++i)
scanf("%d",&a[i]);
fclose(stdin);
}
void add(int x, int val)
{
for(int i=x; i<=N; i += zeros(i))
AIB[i] += val;
}
int sum(int x)
{
int rez = 0;
for(int i=x; i; i -= zeros(i))
rez += AIB[i];
return rez;
}
int query(int val)
{
int i, step;
for(step = 1; step < N; step <<= 1);
for(i = N; step; step >>= 1)
if(i - step)
{
int x = sum(i - step);
if(val <= x)
i -= step;
}
return i;
}
void rezolva()
{
for(int i=1; i<=N; ++i)
add(i, 1);
for(int i=N; i; --i)
{
int poz = query(a[i]);
Sol[poz] = i;
add(poz, -1);
}
}
void afiseaza()
{
freopen(outfile, "w", stdout);
for(int i=1; i<=N; ++i)
printf("%d\n",Sol[i]);
fclose(stdout);
}
int main(void)
{
citeste();
rezolva();
afiseaza();
return 0;
}