Cod sursa(job #811021)

Utilizator vlad.doruIon Vlad-Doru vlad.doru Data 11 noiembrie 2012 13:48:56
Problema Schi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <fstream>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <bitset>

using namespace std;

ifstream in("schi.in");
ofstream out("schi.out");

short int n;
short int v[30010]; // bucket[i] tine de la bucket*i pana la bucketsize*(i+1) -1 ;
short int bucket[30010];
short int occupied[30010];
short int place[30010];
short int bucketsize;

inline void query(short int x,short int poz){
	short int i=0;
	short int sum=0;
	while(sum+bucket[i]<x){
		sum+=bucket[i];
		++i;
	}
	short int j;
	for(j=i*bucketsize;sum!=x;++j){
		sum+=occupied[j];
	}
	--bucket[(j-1)/bucketsize];
	occupied[j-1]=0;
	place[j-1]=poz;
}

int main(){
	freopen("schi.in", "r", stdin);
	freopen("schi.out", "w", stdout);
	char buffer[33];
	scanf("%hd",&n);
	bucketsize=128;
	short i;
	short int max1=n/bucketsize;
	bucket[0]=bucketsize-1;
	for(i=1;i<=max1;++i){
		bucket[i]=bucketsize;
	}
	bucket[max1]=n-(max1)*bucketsize +1;
	for(i=1;i<=n;++i){
		occupied[i]=1;
		scanf("%hd",&v[i]);
	}
	for(i=n;i>0;--i){
		query(v[i],i);
	}
	for(i=1;i<=n;++i){
		itoa(place[i],buffer,10);
		printf("%s\n",buffer);
	}
	return 0;
}