Pagini recente » Cod sursa (job #2130706) | Cod sursa (job #2473436) | Cod sursa (job #2404146) | Cod sursa (job #2958809) | Cod sursa (job #1954671)
#include <fstream>
using namespace std;
ifstream fi("schi.in");
ofstream fo("schi.out");
int A[30001],v[30001],sol[30001],i,n;
void Update(int x,int v)
{
for(int i=x; i<=n; i+= i & (-i))
A[i]+=v;
}
int Query(int x)
{
int s=0;
for(int i=x; i>=1; i-= i & (-i))
s+=A[i];
return s;
}
int Search(int p)
{
int st = 1, dr = n, sol = n;
while (st <= dr)
{
int mij = (st + dr) >> 1;
if (Query(mij) >= p)
{
sol = mij;
dr = mij - 1;
}
else
st = mij + 1;
}
return sol;
}
int main()
{
fi>>n;
for(int i=1;i<=n;i++) fi>>v[i];
for(int i=1;i<=n;i++) Update(i,1);
for(i=n;i>=1;i--)
{
int poz=Search(v[i]);
Update(poz,-1);
sol[poz]=i;
}
for(int i=1;i<=n;i++) fo<<sol[i]<<" ";
return 0;
}