Pagini recente » Cod sursa (job #1930052) | Cod sursa (job #3136446) | Cod sursa (job #2471671) | Cod sursa (job #981773) | Cod sursa (job #1538554)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
const int LIM = 3e4 + 5;
const int NMax = 4 * 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;
}