Pagini recente » Cod sursa (job #1341046) | Cod sursa (job #2169025) | Cod sursa (job #908097) | Cod sursa (job #2004186) | Cod sursa (job #809931)
Cod sursa(job #809931)
#include <fstream>
#include <cmath>
using namespace std;
ifstream in("schi.in");
ofstream out("schi.out");
int n;
int *v=new int[30100]; // bucket[i] tine de la bucket*i pana la bucketsize*(i+1) -1 ;
int *bucket=new int[300];
bool *occupied=new bool[30100];
int *place=new int[30100];
int bucketsize;
int query(int x){
int i=0;
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];
}
return j-1;
}
void decrement(int x){
bucket[x/bucketsize]--;
occupied[x]=0;
}
int main(){
in>>n;
bucketsize=(int)sqrt(n);
int 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){
place[query(v[i])]=i;
decrement(query(v[i]));
}
for(i=1;i<=n;++i){
out<<place[i]<<"\n";
}
return 0;
}