Cod sursa(job #810009)

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

using namespace std;

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

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

void query(short int x,short int poz){
	short int i=0;
	register 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;
}