Pagini recente » Cod sursa (job #1942395) | Cod sursa (job #2747729) | Cod sursa (job #2722885) | Cod sursa (job #1728954) | Cod sursa (job #2765446)
#include <fstream>
#include <iostream>
using namespace std;
const int MAX_N = 30000;
int vec[MAX_N];
int aib[MAX_N + 1];
int nrnr;
int query(int pos) {
int ans;
ans = 0;
while (pos) {
ans += aib[pos];
pos = pos & (pos - 1);
}
return ans;
}
void addval(int val, int pos) {
while (pos <= nrnr) {
aib[pos] += val;
pos += pos & -pos;
}
}
int setpos(int val) {
int sav;
int ans;
sav = 0;
ans = 0;
for (int index = (1 << 20); index; index >>= 1) {
if (ans + index <= nrnr && sav + aib[ans + index] < val) {
ans += index;
sav += aib[ans];
}
}
ans++;
addval(-1, ans);
return ans;
}
int ans[MAX_N];
int main()
{
std::ifstream fin("schi.in");
std::ofstream fout("schi.out");
fin >> nrnr;
for (int index = 1; index <= nrnr; index++) {
aib[index] = index & -index;
}
for (int index = 0; index < nrnr; index++) {
fin >> vec[index];
}
for (int index = nrnr - 1; index >= 0; index--) {
ans[setpos(vec[index]) - 1] = index + 1;
}
for (int index = 0; index < nrnr; index++) {
fout << ans[index] << '\n';
}
}