Pagini recente » Cod sursa (job #1259282) | Cod sursa (job #1775287) | Cod sursa (job #2846009) | Cod sursa (job #2976033) | Cod sursa (job #1624437)
#include <cstdio>
using namespace std;
const int N=30005;
int v[N],aib[4*N+66],clasament[N];
int poz,val,start,fin,plu;
void ras(int nod,int st,int dr)
{
int mid;
if(start<=st && dr<=fin)
{
plu=plu+aib[nod];
fin=fin+aib[nod];
return ;
}
else
{
mid=(st+dr)/2;
if(start<=mid)
ras(2*nod,st,mid);
if(fin>mid)
ras(2*nod+1,mid+1,dr);
}
}
void update(int nod,int st,int dr)
{
int mid;
if(st==dr)
{
aib[nod]++;
return ;
}
else
{
mid=(st+dr)/2;
if(poz<=mid)
update(2*nod,st,mid);
if(poz>mid)
update(2*nod+1,mid+1,dr);
}
aib[nod]=aib[2*nod]+aib[2*nod+1];
}
int main()
{
FILE *in,*out;
in=fopen("schi.in","r");
out=fopen("schi.out","w");
int n,i;
fscanf(in,"%d",&n);
for(i=1;i<=n;i++)
fscanf(in,"%d",&v[i]);
for(i=n;i>=1;i--)
{
start=1;
fin=v[i];
plu=0;
ras(1,1,n);
clasament[v[i]+plu]=i;
val=1;
poz=v[i]+plu;
update(1,1,n);
}
for(i=1;i<=n;i++)
fprintf(out,"%d\n",clasament[i]);
return 0;
}