Pagini recente » Cod sursa (job #884022) | Cod sursa (job #2693454) | Cod sursa (job #893003) | Cod sursa (job #757427) | Cod sursa (job #2953624)
#include <bits/stdc++.h>
using namespace std;
ifstream in("schi.in");
ofstream out("schi.out");
int poz[30005],n,aib[30005];
int fin[30005];
int ans[30005];
int query(int p)
{
int sum = 0;
for (int i = p; i >= 1; i -= (i & -i))
sum += aib[i];
return sum;
}
void update(int p)
{
for (int i = p; i <= n; i += (i & -i))
aib[i]++;
}
bool incerc(int p,int c)
{
int pz = poz[c] + query(p);
if (pz > p)
return false;
return true;
}
int main()
{
in >> n;
for (int i = 1; i <= n; i++)
in >> poz[i];
for (int i = n; i >= 1; i--)
{
int st = 0,pas = 1 << 14;
while (pas != 0)
{
if (st + pas < n and incerc(st + pas,i) == false)
st += pas;
pas /= 2;
}
fin[i] = st + 1;
//cout << fin[i] << ' ';
update(fin[i]);
}
for (int i = 1; i <= n; i++)
ans[fin[i]] = i;
for (int i = 1; i <= n; i++)
out << ans[i] << '\n';
return 0;
}