Cod sursa(job #679185)

Utilizator balakraz94abcd efgh balakraz94 Data 12 februarie 2012 21:02:52
Problema Schi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#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;
}