Pagini recente » Cod sursa (job #1510128) | Cod sursa (job #1392440) | Cod sursa (job #1284300) | Cod sursa (job #1090135) | Cod sursa (job #3131471)
#include <fstream>
using namespace std;
int M,N,arb[500001],x,a,b,c,v[500001],sol[500001];
ifstream f ("ski.in");
ofstream g ("ski.out");
void upd(int nod, int st, int dr, int p)
{
if(st==dr)
arb[nod]=1;
else
{
int mij=(st+dr)/2;
if(p<=mij)
upd(2*nod,st,mij,p);
else
upd(2*nod+1,mij+1,dr,p);
arb[nod]=arb[2*nod]+arb[2*nod+1];
}
}
int query(int nod, int st, int dr, int p)
{
if(st==dr)
{
arb[nod]=0;
return st;
}
else
{
int mij=(st+dr)/2, k=0;
if(p<=arb[2*nod])
k=query(2*nod,st,mij,p);
else
k=query(2*nod+1,mij+1,dr,p-arb[2*nod]);
arb[nod]=arb[2*nod]+arb[2*nod+1];
return k;
}
}
int main()
{
f>>N;
for(int i=1;i<=N;i++)
{
f>>v[i];
upd(1,1,N,i);
}
for(int i=N;i>=1;i--)
sol[query(1,1,N,v[i])]=i;
for(int i=1;i<=N;i++)
g<<sol[i]<<'\n';
f.close();
g.close();
return 0;
}