Pagini recente » Cod sursa (job #3201442) | Cod sursa (job #2303172) | Cod sursa (job #1205699) | Cod sursa (job #2498447) | Cod sursa (job #1788215)
#include <fstream>
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
const int N = 30010;
int n, i, j, v[N], s[N], a[4*N];
void go(int st, int dr, int nod) {
if (st == dr) {
a[nod] = 1;
return;
}
int mij = (st + dr) >> 1;
go(st, mij, (nod << 1));
go(mij + 1, dr, (nod << 1) + 1);
a[nod] = a[(nod << 1)] + a[(nod << 1) + 1];
}
int querry(int st, int dr, int nod, int x) {
if (st == dr) {
a[nod] = 0;
return st;
}
int mij = (st + dr) >> 1, r;
if (a[(nod << 1)] >= x) {
r = querry(st, mij, (nod << 1), x);
} else {
r = querry(mij+1, dr, (nod << 1) + 1, x - a[(nod << 1)]);
}
a[nod] = a[(nod << 1)] + a[(nod << 1) + 1];
return r;
}
int main() {
fin >> n;
for (i = 1; i <= n; ++i)
fin >> v[i];
go(1, n, 1);
for (i = n; i > 0; --i)
s[ querry(1, n, 1, v[i]) ] = i;
for (i = 1; i <= n; ++i)
fout << s[i] << "\n";
return 0;
}