Pagini recente » Cod sursa (job #2406572) | Cod sursa (job #3303147) | Cod sursa (job #1837564) | Cod sursa (job #573407) | Cod sursa (job #3341609)
#include <iostream>
#include <algorithm>
#include <cstring>
#include <climits>
#include <iomanip>
#include <numeric>
#include <bitset>
#include <string>
#include <vector>
#include <cmath>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#define int long long
//#define int short
#define f first
#define s second
using namespace std;
int n, v[30005], aib[30005], r[30005];
void update(int poz, int val){
while (poz <= n){
aib[poz] += val;
poz += poz & (-poz);
}
}
int query(int val){
int pos = 0;
for (int i = log2(n); i >= 0; i--){
if (pos + (1 << i) <= n && aib[pos + (1 << i)] < val){
pos += (1 << i);
val -= aib[pos];
}
}
return pos + 1;
}
signed main(){
cin>>n;
for (int i = 1; i <= n; i++){
cin>>v[i];
}
for (int i = 1; i <= n; i++){
update(i, 1);
}
for (int i = n; i >= 1; i--){
int x = query(v[i]);
r[x] = i;
update(x, -1);
}
for (int i = 1; i <= n; i++){
cout<<r[i]<<"\n";
}
}