Cod sursa(job #1388825)

Utilizator Darius15Darius Pop Darius15 Data 15 martie 2015 19:09:05
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <fstream>
#include <algorithm>
#define zeros(x) ((x^(x-1))&x)
using namespace std;
ifstream f("schi.in");
ofstream g("schi.out");
int n,v[30001],aib[30001],y,pi,i;
void adauga(int poz,int val)
{
    int i;
    for (i=poz;i<=n;i+=zeros(i))
     aib[i]+=val;
}
struct sol{int i,j;};
sol vec[30001];
int cauta(int x)
{
    int i,p=pi;
    for (i=0;p;p>>=1)
        if (i+p<=n)
           if (aib[i+p]<x)
           i+=p,x-=aib[i];
    return i+1;
}
bool cmp(sol a,sol b)
{
    return a.i<b.i;
}
int main()
{
    f>>n;
    for (i=1;i<=n;i++)
        f>>v[i],adauga(i,1);
    for(pi=1;pi<n;pi<<=1);
    for (i=n;i>=1;i--)
    {
       y=cauta(v[i]);
       vec[i].i=y,vec[i].j=i;
       adauga(y,-1);
    }
    sort(vec+1,vec+n+1,cmp);
    for (i=1;i<=n;i++)
        g<<vec[i].j<<'\n';
    return 0;
}