Pagini recente » Cod sursa (job #154346) | Cod sursa (job #2575902) | Cod sursa (job #2604151) | Cod sursa (job #402423) | Cod sursa (job #40685)
Cod sursa(job #40685)
#include <stdio.h>
#include <iostream>
using namespace std;
int sir[30001];
int n;
int poz[30001];
int in[30001];
int i,j;
int pozc,ad,x;
void ADD( int poz, int val );
int SUM( int poz );
int main()
{
freopen("schi.in","r",stdin);
freopen("schi.out","w",stdout);
scanf("%d\n", &n);
for ( i = 1; i <= n; ++i )
scanf("%d\n", &poz[i] );
for ( i = n; i >= 1; --i )
{
pozc = poz[i];
ad = 0;
x = SUM( pozc );
while ( ad != x ) {
pozc += ( x - ad );
ad += ( x - ad );
x = SUM( pozc );
}
in[ pozc ] = i;
ADD( pozc, 1 );
}
for ( i = 1; i <= n; i++ )
printf("%d\n", in[i] );
fclose(stdin);
fclose(stdout);
return 0;
}
inline int lsb( int a )
{
return a ^ ( a & ( a-1 ) );
}
void ADD( int poz, int val )
{
int p = 0;
while ( poz <= n )
{
sir[ poz ] += val;
poz+=( lsb( poz ) );
}
}
int SUM( int poz )
{
int s = 0, p = 0;
while ( poz > 0 )
{
s += sir[ poz ];
poz -= ( lsb( poz ) );
}
return s;
}