Pagini recente » Cod sursa (job #2658865) | Cod sursa (job #43862) | Cod sursa (job #2091899) | Cod sursa (job #2572342) | Cod sursa (job #2777035)
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
ifstream in ("schi.in");
ofstream out ("schi.out");
long int n;
long long bit[30069];
int poz[30030];
void update (int i, int val)
{
while (i <= n)
{
bit[i] += val;
i += (i & -i);
}
}
int ps(int i)
{
long long sum = 0;
while (i > 0)
{
sum += bit[i];
i -= (i & -i);
}
return sum;
}
int rangeSum(int i, int j){
return ps(j) - ps(i - 1);
}
int cb(int x)
{
int h = n; int l = x;
while (l < h)
{
int m = (l + h) / 2;
if (ps(m) < x)
{
l = m + 1;
}
else {
h = m;
}
}
return h;
}
int ans[30030];
int main ()
{
in >> n;
for (int i = 1; i <= n; i++)
{
in >> poz[i];
update(i, 1);
}
int index;
for (int i = n; i > 0; i --)
{
// fin[i] = poz[i] + ps(poz[i]);
index = cb(poz[i]);
update(index, -1);
for (int i = 1; i <= n; i ++)
{
cout << ps(i) << " ";
}
cout << "\n";
ans[index] = i;
}
//int k;
/* for (int i = n; i > 0; i--)
{
int incr = 0;
while (ans[fin[i] + incr])
incr ++;
ans[fin[i] + incr] = i;
}*/
for (int i = 1; i <= n; i ++)
{
out << ans[i] << "\n";
}
}