Cod sursa(job #777649)

Utilizator ionut_blesneagIonut Blesneag ionut_blesneag Data 12 august 2012 22:41:08
Problema Schi Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<fstream>
using namespace std;

ifstream f("schi.in");
ofstream g("schi.out");

int n,i,val,poz,a[30005],ranking[30005],rez;
int tree[1<<16+1];

void update(int nod, int left, int right)
{if(left==right)
   {tree[nod]=val;
    return;}
 int mij=(left+right)/2;  
 if(poz<=mij)
    update(2*nod, left, mij);
 else
    update(2*nod+1, mij+1, right);
 tree[nod]=tree[2*nod+1]+tree[2*nod];        
}

void query(int nod, int left, int right)
{if(left==right)
   {rez=left;
    return;}
 int mij=(left+right)/2;
 if(val<=tree[2*nod])
   query(2*nod,left,mij);
 else
   {val=val-tree[2*nod];
    query(2*nod+1,mij+1,right);}  
}

int main()
{f>>n;
for(i=1; i<=n; i++)
  {poz=i;
   val=1;
   update(1,1,n);
   f>>a[i];}   
   
for(i=n; i>=1; i--)
  {val=a[i];
   query(1,1,n);
   ranking[rez]=i;
   poz=rez;
   val=0;
   update(1,1,n);
   }    
   
for(i=1; i<=n; i++)
  g<<ranking[i]<<endl;   

f.close();
g.close();
return 0;}