Pagini recente » Cod sursa (job #1493534) | Cod sursa (job #3317451) | Cod sursa (job #1406372) | Borderou de evaluare (job #2079215) | Cod sursa (job #3322308)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
const int NMAX = 3e4 + 1;
int aib[NMAX], n;
void update(int x, int val)
{
for (int i = x; i <= n; i += i & -i)
aib[i] += val;
}
int bs(int val)
{
int i = 0;
for (int p = (1 << 15); p; p >>= 1)
if (p + i <= n && aib[p + i] <= val)
{
i += p;
val -= aib[i];
}
return i;
}
int main()
{
fin >> n;
vector<int> ans(n + 1), a(n + 1);
for (int i = 1; i <= n; ++i)
{
fin >> a[i];
update(i, 1);
}
for (int i = n; i; --i)
{
int loc = bs(a[i] - 1) + 1;
update(loc, -1);
ans[loc] = i;
}
for (int i = 1; i <= n; ++i)
fout << ans[i] << "\n";
return 0;
}