Pagini recente » Cod sursa (job #543790) | Cod sursa (job #2207449) | Cod sursa (job #2026368) | Cod sursa (job #1986068) | Cod sursa (job #855014)
Cod sursa(job #855014)
#include<cstdio>
#include<cstdlib>
#define maxn 30000
FILE*f=fopen("schi.in","r");
FILE*g=fopen("schi.out","w");
int A[5*maxn],n,val,pos;
void update(int nod,int st,int dr)
{
int mij;
if (st==dr)
{
A[nod]=val;
return;
}
mij=(st+dr)/2;
if (pos<=mij)
update(2*nod,st,mij);
else
update(2*nod+1,mij+1,dr);
A[nod]=A[2*nod]+A[2*nod+1];
}
void query(int nod,int st,int dr,int val1)
{
int mij;
if (st==dr)
{
pos=st;
return;
}
mij=(st+dr)/2;
if (A[2*nod]>=val1)
query(2*nod,st,mij,val1);
else
query(2*nod+1,mij+1,dr,val1-A[2*nod]);
}
int main()
{
int sol[maxn],i,v[maxn];
fscanf(f,"%d",&n);
val=1;
for (i=1;i<=n;i++)
{
fscanf (f,"%d",&v[i]);
pos=i;
update(1,1,n);
}
val=0;
for (i=n;i>=1;i--)
{
query(1,1,n,v[i]);
sol[pos]=i;
update(1,1,n);
}
for (i=1;i<=n;i++)
fprintf(g,"%d\n",sol[i]);
return 0;
}