Pagini recente » Cod sursa (job #2849871) | Cod sursa (job #203534) | Cod sursa (job #3160376) | Cod sursa (job #3282406) | Cod sursa (job #2391118)
#include <bits/stdc++.h>
int arb[100000], v[50000], rsp[50000];
int querry(int poz, int x, int put){
if(poz>=put)
return poz;
if(arb[poz*2]>=x)
return querry(poz*2, x, put);
return querry(poz*2+1, x-arb[poz*2], put);
}
void update(int poz){
if(poz!=1){
arb[poz/2]=arb[poz/2*2]+arb[poz/2*2+1];
update(poz/2);
}
}
int main(){
FILE *fin, *fout;
int n, i, put, j, var;
fin=fopen("schi.in", "r");
fout=fopen("schi.out", "w");
fscanf(fin, "%d", &n);
for(i=0;i<n;i++)
fscanf(fin, "%d", &v[i]);
put=1;
while(put*2<n)
put*=2;
put*=2;
for(i=0;i<n;i++){
arb[put+i]=1;
update(put+i);
}
for(i=n-1;i>=0;i--){
var=querry(1, v[i], put)-put+1;
rsp[var]=i+1;
arb[put+var-1]=0;
update(put+var-1);
}
for(i=1;i<=n;i++)
fprintf(fout, "%d\n", rsp[i]);
fclose(fin);
fclose(fout);
return 0;
}