Cod sursa(job #918884)

Utilizator apopeid13Apopeid Alejandro apopeid13 Data 19 martie 2013 10:47:04
Problema Schi Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<cstdio>
#define NMAX 30005
#define lsb(x) x&(-x)
FILE *f=fopen("schi.in","r");
FILE *g=fopen("schi.out","w");
using namespace std;
int N,v[NMAX],res[NMAX],AIB[NMAX];
void Update( int nod,int val)
{
for(;nod<=N;nod+=lsb(nod))
AIB[nod]+=val;
}
int Query(int nod)
{
int s=0;
for(;nod;nod-=lsb(nod))
s+=AIB[nod];
return s;
}
inline int bs( int val)
{
int step=1<<20,right=N;
while( step )
{
if( right-step >= 1 && Query(right-step ) >= val )
right-=step;
step>>=1;
}
return right;
}
void solve( void )
{
int Answer;
for(int i(1) ; i <= N ; ++i )
Update(i,1);
for(int i(N); i; i--)
{
Answer=bs(v[i]);
res[Answer]=i;
Update(Answer,-1);
}
}
void write ( void )
{
for(int i(1); i <= N ; fprintf(g,"%d\n",res[i++]));
fclose(g);
}
int main()
{
fscanf(f,"%d",&N);
for(int i(1); i <= N ; fscanf(f,"%d",&v[i++]));
fclose(f);
solve();
write();
return 0;
}