Cod sursa(job #1846967)

Utilizator smatei16Matei Staicu smatei16 Data 14 ianuarie 2017 10:48:04
Problema Schi Scor 100
Compilator cpp Status done
Runda aib-uuri_cex Marime 0.69 kb
#include <cstdio>
#define zeros(x)(x&(-x))
using namespace std;
int n,aib[30003],a[30003],b[30003];
void add(int x){
for(int i=x;i<=n;i+=zeros(i))
aib[i]--;
}
int sum(int x){
int sum=0;
for(int i=x;i>0;i-=zeros(i))
sum+=aib[i];
return sum;
}
int caut(int x,int i){
int st,dr,mij;
st=1;dr=n;
while(st<=dr){
mij=(st+dr)/2;
int u=sum(mij);
if(u<x)st=mij+1;
else dr=mij-1;
}
add(dr+1);
return dr+1;
}
int i;
int main()
{freopen("schi.in","r",stdin);
freopen("schi.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=1;i<=n;i++)
aib[i]=zeros(i);
for(i=n;i>=1;i--){
b[caut(a[i],i)]=i;
}
for(i=1;i<=n;i++)printf("%d\n",b[i]);

    return 0;
}