Pagini recente » Cod sursa (job #138463) | Cod sursa (job #1652461) | Cod sursa (job #2644562) | Cod sursa (job #1982686) | Cod sursa (job #2117831)
#include <fstream>
using namespace std;
const int SIZE = 102400;
char Buffer[SIZE];
ifstream cin ("schi.in");
ofstream cout ("schi.out");
const int MAX_N = 10000;
int n;
int Loc[1 + MAX_N];
int ArbInt[4 * MAX_N];
int LoculFinal[1 + MAX_N];
void Build(int nod, int st, int dr, int index) {
if(st == dr) {
ArbInt[nod] = 1;
return;
}
int mid = (st + dr) / 2;
if(index <= mid)
Build(2 * nod, st, mid, index);
else
Build(2 * nod + 1, mid + 1, dr, index);
ArbInt[nod] = ArbInt[2 * nod] + ArbInt[2 * nod + 1];
}
void GasesteLoculFinal(int nod, int st, int dr, int index, int place) {
if(st == dr) {
ArbInt[nod] = 0;
LoculFinal[st] = place;
return;
}
int mid = (st + dr) / 2;
if(index <= ArbInt[2 * nod])
GasesteLoculFinal(2 * nod, st, mid, index, place);
else
GasesteLoculFinal(2 * nod + 1, mid + 1, dr, index - ArbInt[2 * nod], place);
ArbInt[nod] = ArbInt[2 * nod] + ArbInt[2 * nod + 1];
}
int main() {
cin.rdbuf() -> pubsetbuf(Buffer, SIZE);
cin >> n;
for(int i = 1; i <= n; i++) {
cin >> Loc[i];
Build(1, 1, n, i);
}
for(int i = n; i > 0; i--)
GasesteLoculFinal(1, 1, n, Loc[i], i);
for(int i = 1; i <= n; i++)
cout << LoculFinal[i] << "\n";
return 0;
}