Pagini recente » Cod sursa (job #835602) | Cod sursa (job #2513271) | Cod sursa (job #2701359) | Cod sursa (job #148200) | Cod sursa (job #2420250)
#include <bits/stdc++.h>
#define Nmax 30000
#define lsb(x) ((-x) & x)
using namespace std;
ifstream fin ("schi.in");
ofstream fout ("schi.out");
int N;
int AIB[1 + Nmax + 5];
int A[1 + Nmax + 5];
int Answerts[1 + Nmax + 5];
inline int query (int value)
{
int answer, sum;
sum = answer = 0;
int pow = (1 << 15);
while (0 <= pow)
{
if (pow + answer <= N && sum + AIB[pow + answer] < value)
answer += pow, sum += AIB[answer];
if (pow == 0)
break;
pow >>= 1;
}
return 1 + answer;
}
inline void update (int poz, int value)
{
while (poz <= N)
AIB[poz] += value, poz += lsb (poz);
}
int main()
{
int length = 0;
fin >> N;
for (int i = 1; i <= N; ++i)
{
int x;
fin >> x;
A[++length] = x;
update (i, 1);
}
while (length)
{
int poz = query (A[length]);
Answerts[poz] = length;
update (poz, -1);
--length;
}
for (int i = 1; i <= N; ++i)
fout << Answerts[i] << "\n";
return 0;
}