Pagini recente » Cod sursa (job #3317339) | Cod sursa (job #875349) | Cod sursa (job #2032084) | Cod sursa (job #1387182) | Cod sursa (job #3314015)
#include <fstream>
using namespace std;
ifstream cin("schi.in");
ofstream cout("schi.out");
int n, poz;
int v[30002], aint[60002], sol[30002];
int query(int nod, int st, int dr, int val){
if(st==dr){
return st;
}
else{
int s1=aint[2*nod];
int s2=aint[2*nod+1];
int mid=(st+dr)/2;
if(s1>=val)
return query(2*nod, st, mid, val);
else return query(2*nod+1, mid+1, dr, val-s1);
}
}
void update(int nod, int st, int dr, int poz, int val){
if(st==dr)
aint[nod]=val;
else{
int mid=(st+dr)/2;
if(poz<=mid)
update(2*nod, st, mid, poz, val);
else update(2*nod+1, mid+1, dr, poz, val);
aint[nod]=aint[2*nod]+aint[2*nod+1];
}
}
int main() {
cin>>n;
for(int i=1;i<=n;i++){
cin>>v[i];
update(1, 1, n, i, 1);
}
for(int i=n;i>=1;i--){
//caut prima poz din aint care are suma == v[i];
poz=query(1, 1, n, v[i]);
update(1, 1, n, poz, 0);
sol[poz]=i;
}
for(int i=1;i<=n;i++){
cout<<sol[i]<<"\n";
}
}