Pagini recente » Cod sursa (job #1331418) | Cod sursa (job #2710890) | Cod sursa (job #2160489) | Cod sursa (job #2816368) | Cod sursa (job #1522652)
#include <fstream>
using namespace std;
const int NMAX=30001;
int val, pos, n, aib[NMAX], sol[NMAX], x[NMAX];
void update(int pos,int val)
{
for(; pos<=n; pos+=pos&(-pos))
aib[pos]+=val;
}
int query(int pos)
{
int s=0;
for(; pos; pos-=pos&(-pos))
s+=aib[pos];
return s;
}
int bs(int val)
{
int l=1, r=n, sol=n;
while(l<=r)
{
int mid=(l+r)/2;
if(query(mid)>=val)
{
sol=mid;
r=mid-1;
}
else l=mid+1;
}
return sol;
}
int main()
{
int i;
ifstream in("schi.in");
ofstream out("schi.out");
in>>n;
for(i=1; i<=n; i++)
{
in>>x[i];
update(i, 1);
}
for(i=n; i>=1; i--)
{
pos=bs(x[i]);
sol[pos]=i;
update(pos, -1);
}
for(i=1; i<=n; i++)
out<<sol[i]<<'\n';
return 0;
}