Pagini recente » Cod sursa (job #1867932) | Cod sursa (job #1082318) | Cod sursa (job #1017926) | Cod sursa (job #1992841) | Cod sursa (job #2776919)
#include <fstream>
using namespace std;
ifstream cin ("schi.in");
ofstream cout ("schi.out");
const int Nmax = 30005;
int v[Nmax], aib[Nmax], sol[Nmax];
int n;
void update(int x)
{
int i;
for(i = x; i <= n; i += (i & -i))
aib[i]++;
}
int solve(int x)
{
int i, sum = 0;
for(i = x; i >= 1; i -= (i & -i))
sum += aib[i];
return sum;
}
int main()
{
int i, j;
cin >> n;
for(i = 0; i < n; i++)
cin >> v[i];
for(i = n - 1; i >= 0; i--){
int st = 1, dr = n, ans;
while (st <= dr) {
int mij = (st + dr) / 2;
if (mij - solve(mij) >= v[i]) {
dr = mij - 1;
ans = mij;
}
else
st = mij + 1;
}
sol[ans] = i + 1;
update(ans);
}
for(i = 1; i <= n; i++)
cout << sol[i] << "\n";
return 0;
}