Pagini recente » Cod sursa (job #1362000) | Borderou de evaluare (job #1567139) | Cod sursa (job #612251) | Cod sursa (job #3165995) | Cod sursa (job #1538553)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
const int LIM = 3e4 + 5;
const int NMax = 2 * LIM;
int A[LIM], B[LIM];
int Aib[NMax];
void BuildTree(int node, int lo, int hi){
if(lo > hi) return;
if(lo == hi){
Aib[node] = 1;
return;
}
int mid = (lo + hi) >> 1;
BuildTree(node * 2, lo, mid);
BuildTree(node * 2 + 1, mid + 1, hi);
Aib[node] = hi - lo + 1;
}
void Update(int node, int lo, int hi, int pos, int i){
if(lo == hi){
Aib[node] = 0;
B[lo] = i;
return;
}
int mid = (lo + hi) >> 1;
if(pos <= Aib[node * 2]){
Update(node * 2, lo, mid, pos, i);
} else {
Update(node * 2 + 1, mid + 1, hi, pos - Aib[node * 2], i);
}
Aib[node]--;
}
int main(){
int n, x;
fin >> n;
for(int i = 1; i <= n; i++) fin >> A[i];
BuildTree(1, 1, n);
for(int i = n; i > 0; i--) Update(1, 1, n, A[i], i);
for(int i = 1; i <= n; i++) fout << B[i] << "\n";
return 0;
}