Cod sursa(job #2149536)

Utilizator tiberiu.bucur17Tiberiu Constantin Emanoil Bucur tiberiu.bucur17 Data 2 martie 2018 18:32:04
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <cstdio>
#include <cmath>
#define MAXN 30001
int aib[MAXN],v[MAXN],sol[MAXN],n;
inline void update(int p)
{
    while(p<=n)
    {
        aib[p]--;
        p+=p&(-p);
    }
}
inline int cbin(int s)
{
    int i=0,pas=log2(n);
    for(pas=1<<pas;pas && s;pas>>=1)
        if(i+pas<=n && aib[i+pas]<s)
            i+=pas,s-=aib[i];
    return i+1;
}
int main()
{
    FILE *fin,*fout;
    fin=fopen("schi.in","r");
    fout=fopen("schi.out","w");
    int x;
    fscanf(fin,"%d",&n);
    for(int i=1;i<=n;i++)
        fscanf(fin,"%d",&v[i]);
    for(int i=1;i<=n;i++)
        aib[i]=i&(-i);
    for(int i=n;i;i--)
    {
        x=cbin(v[i]);
        sol[x]=i;update(x);
    }
    for(int i=1;i<=n;i++)
        fprintf(fout,"%d\n",sol[i]);
    fclose(fin);
    fclose(fout);
    return 0;
}