Pagini recente » Cod sursa (job #2010647) | Cod sursa (job #1179646) | Cod sursa (job #2064399) | Cod sursa (job #2409525) | Cod sursa (job #1367311)
#include<stdio.h>
#define N 30000
int val[N+1],v[N+1],poz[N],n;
void update(int poz,int val)
{
int cont=0;
while(poz<=n)
{
v[poz]+=val;
while((poz&(1<<cont))==0)
cont++;
poz+=(1<<cont);
cont++;
}
}
int sum(int poz)
{
int s=0,cont=0;
while(poz)
{
s+=v[poz];
while((poz&(1<<cont))==0)
cont++;
poz-=(1<<cont);
cont++;
}
return s;
}
int main(){
FILE *fin,*fout;
fin=fopen("schi.in","r");
fout=fopen("schi.out","w");
fscanf(fin,"%d",&n);
int i;
for(i=1;i<=n;i++){
fscanf(fin,"%d",&val[i]);
update(i,1);
}
for(i=n;i>=1;i--){
int st=1,dr=n;
while(st<=dr){
int mij=(st+dr)/2;
if(sum(mij)>=val[i])
dr=mij-1;
else
st=mij+1;
}
update(st,-1);
poz[st]=i;
}
for(i=1;i<=n;i++)
fprintf(fout,"%d\n",poz[i]);
}