Cod sursa(job #809987)

Utilizator vlad.doruIon Vlad-Doru vlad.doru Data 9 noiembrie 2012 13:50:42
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <fstream>
#include <cmath>

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];
int bucketsize;

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]>>=1;
	place[j-1]=poz;
}

int main(){
	in>>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;
		in>>v[i];
	}
	for(i=n;i>0;--i){
		query(v[i],i);
	}
	for(i=1;i<=n;++i){
		out<<place[i]<<"\n";
	}
	return 0;
}