Pagini recente » Cod sursa (job #2675720) | Cod sursa (job #1503033) | Cod sursa (job #51320) | Istoria paginii agm-2018/runda2 | Cod sursa (job #213932)
Cod sursa(job #213932)
//aib
#include <fstream>
#define loop (poz^(poz-1))&poz
using namespace std;
ifstream fin ("schi.in");
ofstream fout ("schi.out");
int sir[30001];
int poz[30001];
int n;
int *val;
int suma (int poz)
{
int S=0;
while (poz>0)
{
S+=sir[poz];
poz-=loop;
}
return S;
}
void update(int poz,int val)
{
while (poz<=n)
{
sir[poz]+=val;
poz+=loop;
}
}
int poz_min(int S)
{
int putere,i;
for (putere=1;putere<n;putere<<=1);
for (i=n; putere!=0; putere>>=1)
if (i-putere>=1)
if (S<=suma(i-putere))
i-=putere;
return i;
}
void citire()
{
val =new int [30001];
fin>>n;
for (int i=1;i<=n;i++)
update(i,1);
for (int i=0;i<n;i++)
fin>>*(val+i);
for (int i=n-1;i>=0;i--)
{
int aux=poz_min(*(val+i));
poz[aux]=i+1;
update(aux,-1);
}
for (int j=1;j<=n;j++)
fout<<poz[j]<<"\n";
}
int main ()
{
citire();
return 0;
}