Pagini recente » Cod sursa (job #315085) | Profil SebiSebi | Cod sursa (job #275514) | Cod sursa (job #1304718) | Cod sursa (job #432579)
Cod sursa(job #432579)
#include<fstream>
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
int n;
int a[70000],poz[30001],b[30001];
void constr(int st,int dr,int poz)
{ a[poz]=dr-st+1;
if(st==dr) return;
int mij=(st+dr)/2;
constr(st,mij,2*poz);
constr(mij+1,dr,2*poz+1);
}
int cauta(int st,int dr, int poz,int val)
{ a[poz]--;
if(st==dr) return st;
int mij=(st+dr)/2;
if(a[2*poz]>=val)
return cauta(st,mij,2*poz,val);
val-=a[2*poz];
return cauta(mij+1,dr,2*poz+1,val);
}
int main()
{ int i;
fin>>n;
constr(1,n,1);
for(i=1;i<=n;i++)
fin>>poz[i];
for(i=n;i>=1;i--)
b[cauta(1,n,1,poz[i])]=i;
for(i=1;i<=n;i++)
fout<<b[i]<<"\n";
fin.close();
fout.close();
return 0;
}