Pagini recente » Cod sursa (job #2881581) | Cod sursa (job #710692) | Cod sursa (job #2194999) | Autentificare | Cod sursa (job #973511)
Cod sursa(job #973511)
#include<fstream>
#define dim 30009
using namespace std;
int n,poz,val,a[dim],pi[dim],pf[dim],mij;
void schimba(int nod,int st,int dr)
{
if(st==dr)
{
a[nod]=val;
return;
}
mij=(st+dr)/2;
if(poz<=mij)
schimba(nod*2,st,mij);
else
schimba(nod*2+1,mij+1,dr);
a[nod]=a[nod*2]+a[nod*2+1];
}
void detclas(int nod,int st,int dr,int sum)
{
if(st==dr)
poz=st;
else
{
mij=(st+dr)/2;
if(a[nod*2]>=sum)
detclas(nod*2,st,mij,sum);
else
detclas(nod*2+1,mij+1,dr,sum-a[nod*2]);
}
}
void citire()
{
ifstream f("schi.in");
f>>n;
for(int i=1;i<=n;i++)
{
f>>pi[i];
poz=i;
val=1;
schimba(1,1,n);
}
}
void rez()
{
val=0;
for(int i=n;i>=1;i--)
{
detclas(1,1,n,pi[i]);
pf[poz]=i;
schimba(1,1,n);
}
}
void afisare()
{
ofstream g("schi.out");
for(int i=1;i<=n;i++)
g<<pf[i]<<"\n";
}
int main()
{
citire();
rez();
afisare();
}