Pagini recente » Cod sursa (job #3215749) | Cod sursa (job #131940) | Cod sursa (job #1551242) | Cod sursa (job #223789) | Cod sursa (job #854448)
Cod sursa(job #854448)
#include <fstream>
#define LS (poz<<1)
#define RS (poz<<1)+1
#define INF (1<<29)
#define NMAX 30004
#define RMAX 130000
using namespace std;
ifstream in("schi.in");
ofstream out("schi.out");
int N,Arb[RMAX],Interm[NMAX],Final[NMAX];
int value,Pos;
void Update(int poz,int start,int final)
{
if(start == final)
Arb[poz] = value;
else
{
int mij = (start + final) / 2;
if(Pos<=mij)
Update(LS,start,mij);
else Update(RS,mij+1,final);
Arb[poz] = Arb[LS] + Arb[RS];
}
}
void Query(int poz,int start,int final,int sum)
{
if(start == final)
Pos = start;
else
{
int mij = (start + final) / 2;
if(Arb[LS]>=sum)Query(LS,start,mij,sum);
else Query(RS,mij+1,final,sum-Arb[LS]);
}
}
int main()
{
int i,x;
in>>N;
for(value = 1,i=1;i<=N;i++)
in>>Interm[i],Pos = i,Update(1,1,N);
for(value = 0,i=N; i ;i--)
{
Query(1, 1, N, Interm[i]);
Final[Pos] = i;
Update(1, 1, N);
}
for(i=1;i<=N;i++)
out<<Final[i]<<'\n';
return 0;
}