Pagini recente » Cod sursa (job #546494) | Cod sursa (job #846083) | Cod sursa (job #1715439) | Cod sursa (job #1615472) | Cod sursa (job #757653)
Cod sursa(job #757653)
#include <fstream>
#include <cstdio>
#define N 30010
using namespace std;
FILE* fin=fopen("schi.in","r");
FILE* fout=fopen("schi.out","w");
const int maxb=8192;
char buf[maxb];
int ptr=0;
inline int GetInt()
{
int nr=0;
while(buf[ptr]<'0'||'9'<buf[ptr])
if (++ptr>=maxb) fread(buf,maxb,1,fin),ptr=0;
while ('0'<=buf[ptr]&&buf[ptr]<='9')
{
nr=nr*10+buf[ptr]-'0';
if (++ptr>=maxb) fread(buf,maxb,1,fin),ptr=0;
}
return nr;
}
int n,i,AI[4*N],ANS[N],V[N],val,poz;
void Update (int nod, int l, int r)
{
if (l==r)
{
AI[nod]=val;
return;
}
int m=(l+r)/2;
if (poz<=m) Update(2*nod,l,m);
else Update(2*nod+1,m+1,r);
AI[nod]=AI[2*nod]+AI[2*nod+1];
}
void Query (int nod, int l, int r)
{
if (l==r)
{
poz=l;
return;
}
int m=(l+r)/2;
if (val<=AI[2*nod]) Query(2*nod,l,m);
else
{
val-=AI[2*nod];
Query(2*nod+1,m+1,r);
}
}
int main ()
{
n=GetInt();
for (i=1;i<=n;i++)
{
V[i]=GetInt();
poz=i;val=1;
Update(1,1,n);
}
for (i=n;i>=1;i--)
{
val=V[i];
Query(1,1,n);
ANS[poz]=i;
val=0;
Update(1,1,n);
}
for (i=1;i<=n;i++)
fprintf(fout,"%d\n",ANS[i]);
fclose(fin);fclose(fout);
return 0;
}