Pagini recente » Cod sursa (job #2491018) | Cod sursa (job #2304072) | Cod sursa (job #1169306) | Cod sursa (job #2291419) | Cod sursa (job #1700203)
#include <iostream>
#include <fstream>
#define NM 30005
using namespace std;
int ai[NM], in[NM], r[NM];
int n;
inline int lsb(int x)
{
return ((x&(x-1))^x);
}
void init()
{
for(int i = 1; i <= NM; ++i)
for(int p = i; p < NM; p += lsb(p))
++ai[p];
}
void upd(int x)
{
for(int p = x; p < NM; p += lsb(p))
--ai[p];
}
int qr(int x)
{
int sm = 0;
for(; x; x -= lsb(x))
sm += ai[x];
return sm;
}
int sr(int x)
{
int st, p = 0;
for(st = 1; st < n; st <<= 1);
for(; st; st >>= 1)
if(qr(p+st) < x)
p += st;
++p;
upd(p);
return p;
}
int main()
{
init();
ifstream f("schi.in");
ofstream g("schi.out");
f >> n;
for(int i = 1; i <= n; ++i)
f >> in[i];
for(int i = n; i; i--)
{
r[sr(in[i])] = i;
}
for(int i = 1; i <= n; ++i)
g << r[i] << '\n';
}