Cod sursa(job #809953)

Utilizator vlad.doruIon Vlad-Doru vlad.doru Data 9 noiembrie 2012 13:35:03
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 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];
bool 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 && i<n/bucketsize){
		sum+=bucket[i];
		++i;
	}
	int j;
	for(j=i*bucketsize;sum!=x && j<=n;++j){
		sum+=occupied[j];
	}
	bucket[(j-1)/bucketsize]--;
	occupied[j-1]=0;
	place[j-1]=poz;
}

void decrement(int x){
	
}

int main(){
	in>>n;
	bucketsize=128;
	short i;
	bucket[0]=bucketsize-1;
	for(i=1;i<=n/bucketsize;++i){
		bucket[i]=bucketsize;
	}
	bucket[n/bucketsize]=n- (n/bucketsize)*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;
}