Pagini recente » Cod sursa (job #1491333) | Cod sursa (job #2160579) | Cod sursa (job #2756920) | Cod sursa (job #1286809) | Cod sursa (job #3154805)
#include <fstream>
#define NMAX 30005
using namespace std;
ifstream in("schi.in");
ofstream out("schi.out");
int v[NMAX];
int aint[2 * NMAX], poz[NMAX];
void build(int node, int nleft, int nright)
{
if (nleft == nright)
{
aint[node] = 1;
return;
}
int nmid = (nleft + nright) / 2;
int leftson = node + 1;
int rightson = node + 2 * (nmid - nleft + 1);
build(leftson, nleft, nmid);
build(rightson, nmid + 1, nright);
aint[node] = aint[leftson] + aint[rightson];
}
void update(int node, int nleft, int nright, int val, int juc)
{
if (nleft == nright)
{
poz[nleft] = juc;
aint[node] = 0;
return;
}
int nmid = (nleft + nright) / 2;
int leftson = node + 1;
int rightson = node + 2 * (nmid - nleft + 1);
if (aint[leftson] >= val)
update(leftson, nleft, nmid, val, juc);
else
update(rightson, nmid + 1, nright, val - aint[leftson], juc);
aint[node] = aint[leftson] + aint[rightson];
}
int main()
{
int n, i, j;
in >> n;
for (i = 1; i <= n; ++i)
in >> v[i];
build(1, 1, n);
for (i = n; i >= 1; --i)
{
update(1, 1, n, v[i], i);
}
//update(1, 1, n, 3, 8);
for (i = 1; i <= n; ++i)
out << poz[i] << "\n";
return 0;
}