Pagini recente » Cod sursa (job #3335485) | Cod sursa (job #864992) | Cod sursa (job #340323) | Cod sursa (job #3158951) | Cod sursa (job #3322704)
#include <bits/stdc++.h>
using namespace std;
#define lsb(x) (x & -x)
#define in fin
#define out fout
ifstream fin("schi.in");
ofstream fout("schi.out");
const int MAXN = 3e4;
int n, x;
int v[MAXN+1], aib[MAXN+1], clasament[MAXN+1];
void sub(int poz) {
for (int i = poz; i <= n; i += lsb(i))
aib[i]--;
}
int suma(int poz) {
int sm = 0;
for (int i = poz; i >= 1; i -= lsb(i))
sm += aib[i];
return sm;
}
int cbinSt(int val) {
int st = 1, dr = n, poz = 0;
while (st <= dr) {
int mid = (st + dr) / 2;
int sMid = suma(mid);
if (val == sMid)
poz = mid;
if (val <= sMid)
dr = mid - 1;
else
st = mid + 1;
}
return poz;
}
int main() {
in >> n;
for (int i = 1; i <= n; i++)
in >> v[i],
aib[i] = lsb(i); // init
for (int i = n; i >= 1; i--) {
int poz = cbinSt(v[i]);
clasament[poz] = i;
sub(poz);
}
for (int i = 1; i <= n; i++)
out << clasament[i] << '\n';
return 0;
}