Pagini recente » Cod sursa (job #3318315) | Cod sursa (job #3319845)
#include <bits/stdc++.h>
using namespace std;
const int Nmax=3e4+5;
int v[Nmax],aib[Nmax],rez[Nmax],n;
int lsb(int x) {
return x&(-x);
}
void update(int poz, int val) {
for (int i=poz; i<=n; i+=lsb(i)) {
aib[i]+=val;
}
}
int bs(int val) {
int sol=0,s=0;
for (int pas=(1<<15); pas>0; pas/=2) {
if (sol+pas<=n && s+aib[sol+pas]<val) {
s+=aib[sol+pas];
sol+=pas;
}
}
return sol+1;
}
int main()
{
ifstream fin("schi.in");
ofstream fout("schi.out");
fin>>n;
for (int i=1; i<=n; ++i) {
fin>>v[i];
update(i,1);
}
for (int i=n; i>=1; --i) {
int poz=bs(v[i]);
rez[poz]=i;
update(poz,-1);
}
for (int i=1; i<=n; ++i) fout<<rez[i]<<endl;
fin.close();
fout.close();
return 0;
}