Pagini recente » Cod sursa (job #1697976) | Cod sursa (job #538975) | Cod sursa (job #1893341) | Cod sursa (job #1291157) | Cod sursa (job #682369)
Cod sursa(job #682369)
#include<stdio.h>
#define MAX 30005
int N,ARB[4*MAX],POZ,VAL,V[MAX],ANSWER[MAX];
inline int suma(int x,int y)
{return x+y;}
void actualizare(int NOD,int st,int dr)
{
if (st==dr)
{
ARB[NOD]=1;
return;
}
int mij = (st+dr)/2;
if(POZ<=mij)
actualizare(NOD*2,st,mij);
else
actualizare(NOD*2+1,mij+1,dr);
ARB[NOD]=suma(ARB[NOD*2],ARB[NOD*2+1]);
}
void interogare(int NOD,int st,int dr)
{
if(st==dr)
{
ARB[NOD]=0;VAL=st;
return ;
}
int mij= (st+dr)/2;
if(POZ<=ARB[NOD*2])
interogare(NOD*2,st,mij);
else
{
POZ-=ARB[NOD*2];
interogare(NOD*2+1,mij+1,dr);
}
ARB[NOD]=suma(ARB[NOD*2],ARB[NOD*2+1]);
}
void deschidere()
{
freopen("schi.in","r",stdin);
freopen("schi.out","w",stdout);
}
void citire()
{
scanf("%d",&N);int i;
for(i=1;i<=N;i++)
{
scanf("%d",&V[i]);
POZ=i;VAL=1;
actualizare(1,1,N);
}
}
void rezolvare()
{
int i;
for(i=N;i>=1;i--)
{
POZ=V[i];
interogare(1,1,N);
ANSWER[VAL]=i;
}
}
void afisare()
{
for(int i=1;i<=N;i++)
printf("%d\n",ANSWER[i]);
}
int main()
{
deschidere();
citire();
rezolvare();
afisare();
return 0;
}