Pagini recente » Cod sursa (job #2836529) | Cod sursa (job #2624732) | Cod sursa (job #911618) | Cod sursa (job #2980039) | Cod sursa (job #2117790)
#include <fstream>
using namespace std;
ifstream cin ("schi.in");
ofstream cout ("schi.out");
const int MAX_N = 30000;
int Place[1 + MAX_N];
int ArbInt[4 * MAX_N];
int FinalPlace[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 FindFinalPlace(int nod, int st, int dr, int index, int place) {
if(st == dr) {
ArbInt[nod] = 0;
FinalPlace[st] = place;
return;
}
int mid = (st + dr) / 2;
if(index <= ArbInt[2 * nod])
FindFinalPlace(2 * nod, st, mid, index, place);
else
FindFinalPlace(2 * nod + 1, mid + 1, dr, index - ArbInt[2 * nod], place);
ArbInt[nod] = ArbInt[2 * nod] + ArbInt[2 * nod + 1];
}
int main() {
int n;
cin >> n;
for(int i = 1; i <= n; i++) {
cin >> Place[i];
Build(1, 1, n, i);
}
for(int i = n; i > 0; i--)
FindFinalPlace(1, 1, n, Place[i], i);
for(int i = 1; i <= n; i++)
cout << FinalPlace[i] << "\n";
return 0;
}