Pagini recente » Cod sursa (job #1059025) | Cod sursa (job #1362173) | Cod sursa (job #1793762) | Cod sursa (job #3241288) | Cod sursa (job #40683)
Cod sursa(job #40683)
#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;
}
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;
}