Pagini recente » Cod sursa (job #3187144) | Cod sursa (job #3004668) | Cod sursa (job #283179) | Cod sursa (job #310208) | Cod sursa (job #2391062)
#include <bits/stdc++.h>
int arb[60000], v[30000], rsp[30000];
int querry(int poz, int x, int put){
if(poz>=put){
if(arb[poz]-x==0)
return poz;
return poz+1;
}
if(arb[poz]>=x)
return querry(poz*2, x, put);
return querry(poz+1, x-arb[poz], 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;
for(i=0;i<put;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;
}