Pagini recente » Profil raluca1234 | Cod sursa (job #2497364) | Cod sursa (job #166676) | Cod sursa (job #2753740) | Cod sursa (job #811034)
Cod sursa(job #811034)
#include <fstream>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <bitset>
#include <cstring>
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;
}
char * itoa(int i) {
char * res = (char*)malloc(8*sizeof(int));
sprintf(res, "%d", i);
return res;
}
int main(){
freopen("schi.in", "r", stdin);
freopen("schi.out", "w", stdout);
char buffer[60000];
char* tempbuf;
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){
tempbuf=itoa(place[i]);
strcat(buffer,tempbuf);
strcat(buffer,"\n");
}
printf("%s",buffer);
return 0;
}