Pagini recente » Cod sursa (job #2671697) | Cod sursa (job #502578) | Cod sursa (job #1375482) | Cod sursa (job #870770) | Cod sursa (job #3200129)
#include <bits/stdc++.h>
using namespace std;
const int dim=3e4+5;
int n,a[dim],aint[4*dim],sol[dim];
void Build(int nod, int st, int dr){
if(st==dr){
aint[nod]=1;
}
else{
int mid=(st+dr)/2;
Build(2*nod,st,mid);
Build(2*nod+1,mid+1,dr);
aint[nod]=aint[2*nod]+aint[2*nod+1];
}
}
void Update(int nod, int st, int dr, int poz){
if(st==dr){
aint[nod]=0;
}
else{
int mid=(st+dr)/2;
if(poz<=mid){
Update(2*nod,st,mid,poz);
}
if(poz>mid){
Update(2*nod+1,mid+1,dr,poz);
}
aint[nod]=aint[2*nod]+aint[2*nod+1];
}
}
int Query(int nod, int st, int dr, int x){
if(st==dr){
return st;
}
else{
int mid=(st+dr)/2;
if(x<=aint[2*nod]){
return Query(2*nod,st,mid,x);
}
else{
return Query(2*nod+1,mid+1,dr,x-aint[2*nod]);
}
}
}
int main(){
ifstream f("schi.in");
ofstream g("schi.out");
f>>n;
Build(1,1,n);
for(int i=1;i<=n;i++){
f>>a[i];
}
for(int i=n;i>=1;i--){
int poz=Query(1,1,n,a[i]);
sol[poz]=i;
Update(1,1,n,poz);
}
for(int i=1;i<=n;i++){
g<<sol[i]<<'\n';
}
return 0;
}