Pagini recente » Diferente pentru utilizator/florinhaja intre reviziile 102 si 103 | Profil Jack_Nick | Diferente pentru utilizator/andrici_cezar intre reviziile 16 si 15 | Diferente pentru utilizator/mihaistamatescu intre reviziile 22 si 21 | Cod sursa (job #657989)
Cod sursa(job #657989)
#include <fstream>
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
#define maxn 30005
int i,N,poz;
int v[maxn],A[4*maxn],C[maxn];
void citire()
{
fin >> N;
for(i=1;i<=N;i++)
fin >> v[i];
}
void initializare(int k, int st, int dr)
{
if(st==dr)
{
A[k]=1;
return;
}
int m=(st+dr)/2;
initializare(2*k,st,m);
initializare(2*k+1,m+1,dr);
A[k]=A[2*k]+A[2*k+1];
}
void query(int k, int st, int dr,int val)
{
if(st==dr)
{
poz=st;
A[k]=0;
return;
}
int m=(st+dr)/2;
if(val<=A[2*k]) query(2*k,st,m,val);
else query(2*k+1,m+1,dr,val-A[2*k]);
A[k]=A[2*k]+A[2*k+1];
}
int main()
{
citire();
initializare(1,1,N);
for(i=N;i;i--)
{
query(1,1,N,v[i]);
C[poz]=i;
}
for(i=1;i<=N;i++)
fout << C[i] << '\n';
fin.close();
fout.close();
return 0;
}