Pagini recente » Cod sursa (job #955807) | ONIS 2014, Clasament | Cod sursa (job #1368765) | Cod sursa (job #1599706) | Cod sursa (job #1952527)
#include <fstream>
#define NMAX 30005
using namespace std;
ifstream f("schi.in");
ofstream g("schi.out");
int i, n, aint[4 * NMAX], ans[NMAX], v[NMAX], pos;
void update(int st, int dr, int node)
{
if (st == dr)
{
aint[node] = 1;
return;
}
int mid = (st + dr) / 2;
update(st, mid, 2 * node);
update(mid + 1, dr, 2 * node + 1);
aint[node] = aint[2 * node] + aint[2 * node + 1];
}
void query(int st, int dr, int node, int val)
{
if (st == dr)
{
aint[node] = 0;
pos = st;
return;
}
int mid = (st + dr) / 2;
if (val <= aint[2 * node])
query(st, mid, 2 * node, val);
else
query(mid + 1, dr, 2 * node + 1, val - aint[2 * node]);
aint[node] = aint[2 * node] + aint[2 * node + 1];
}
int main()
{
f >> n;
for (i = 1; i <= n; ++ i)
f >> v[i];
update(1, n, 1);
for (i = n; i >= 1; -- i)
{
query(1, n, 1, v[i]);
ans[pos] = i;
}
for (i = 1; i <= n; ++ i)
g << ans[i] << '\n';
return 0;
}