Cod sursa(job #213932)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 12 octombrie 2008 01:22:01
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
//aib
#include <fstream>
#define loop (poz^(poz-1))&poz

using namespace std;

ifstream fin ("schi.in");
ofstream fout ("schi.out");

int sir[30001];
int poz[30001];
int n;
int *val;

int suma (int poz)
{
     int S=0;
     while (poz>0)
     {
          S+=sir[poz];
          poz-=loop;
     }
     return S;
}

void update(int poz,int val)
{
     while (poz<=n)
     {
          sir[poz]+=val;
          poz+=loop;
     }
}

int poz_min(int S)
{
     int putere,i;
     for (putere=1;putere<n;putere<<=1);

     for (i=n; putere!=0; putere>>=1)
     if (i-putere>=1)
     if (S<=suma(i-putere))
          i-=putere;
     return i;
}

void citire()
{
     val =new int [30001];
     fin>>n;
     for (int i=1;i<=n;i++)
          update(i,1);

     for (int i=0;i<n;i++)
          fin>>*(val+i);

     for (int i=n-1;i>=0;i--)
     {
          int aux=poz_min(*(val+i));
          poz[aux]=i+1;
          update(aux,-1);
     }

     for (int j=1;j<=n;j++)
          fout<<poz[j]<<"\n";
}

int main ()
{
     citire();
     return 0;
}