Pagini recente » Cod sursa (job #1327894) | Cod sursa (job #1890211) | Cod sursa (job #449896) | Cod sursa (job #79760) | Cod sursa (job #2199073)
#include <fstream>
#include <list>
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
const int N=30000;
int aib[N+5],n;
int f(int x)
{
return x&(-x);
}
void add(int poz,int val)
{
for(int i=poz;i<=n;i+=f(i))
aib[i]+=val;
}
int prefix(int poz)
{
int sol=0;
for(int i=poz;i>=1;i-=f(i))
sol+=aib[i];
return sol;
}
int v[N+5],loc[N+5];
int cauta(int val)
{
int r=0,pas=(1<<14),sum=0;
while(pas)
{
if(r+pas<=n && r+pas+1-(sum+aib[r+pas])<=val)
{
sum+=aib[r+pas];
r+=pas;
}
pas/=2;
}
return r+1;
}
int main()
{
fin>>n;
for(int i=1;i<=n;i++)
fin>>v[i];
for(int i=n;i>=1;i--)
{
int poz=cauta(v[i]);
add(poz,1);
loc[poz]=i;
}
for(int i=1;i<=n;i++)
fout<<loc[i]<<"\n";
return 0;
}
/**
**/