Cod sursa(job #810008)

Utilizator marius135Dumitran Adrian Marius marius135 Data 9 noiembrie 2012 13:56:55
Problema Schi Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<stdio.h>
#include<string>
#include<iostream>
#include<stdlib.h>
#include<cstdlib>

using namespace std;

#define size 128
#define maxn 30001

int nr[maxn], cate[maxn], poz[maxn], N, V[maxn];
int bucket_nr;

int afla(int x) {
	
	int i = 0;
	while( cate[i] < x) 
		x-= cate[i++];
	
	i = (i<<7);
	while(x)
		if( nr[i++] == 1) 
			--x;
	return i - 1;
}

inline void scoate(int val) {
	nr[val] = 0;
	cate[val>>7]--;
}

int main() {
	
	freopen("schi.in", "r", stdin);
	freopen("schi.out", "w", stdout);
	scanf("%d", &N);
	bucket_nr = maxn/size + 1;
	for( int i = 1; i <= N; ++i){
		nr[i] = 1;
		scanf("%d", &V[i]);
	}
	for( int i = 0; i <= bucket_nr; ++i)
		cate[i] = size;
	cate[0]--;
	
	for( int i = N; i >= 1; --i) {
		int x = afla(V[i]);
		poz[x] = i;
		scoate(x);
	}
	string a;
	for( int i = 1; i <= N; ++i) {
		char stri[5];
		itoa(poz[i], stri, 10);
		//a += string(itoa(poz[i]));
		a += stri;
		a += "\n";
	}
	cout<<a;

	return 0;
}