Pagini recente » Cod sursa (job #134791) | Cod sursa (job #2333053) | Monitorul de evaluare | Statistici valentin gabriel (Gabi303) | Cod sursa (job #3136609)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
int poz[30001], pozi[30001], n, pozfin[30001], aib[30001], ls, ld, mij;
void update(int pos, int val)
{
for(int i = pos; i <= n; i += i & (-i))
aib[i] += val;
}
int query(int pos)
{
int sum = 0;
for(int i = pos; i > 0; i -= i & (-i))
sum += aib[i];
return sum;
}
int cb(int val)
{
ls = 1;
ld = n;
int ans = 0;
while(ls <= ld)
{
mij = (ls + ld) / 2;
if(val <= query(mij))
{
ans = mij;
ld = mij - 1;
}
else
ls = mij + 1;
}
return ans;
}
int main()
{
fin >> n;
for(int i = 1; i <= n; ++ i)
{
fin >> poz[i];
update(i, 1);
}
for(int i = n; i; --i)
{
int pozi = cb(poz[i]);
pozfin[pozi] = i;
update(pozi, -1);
}
for(int i = 1; i <= n; ++ i)
fout << pozfin[i] << '\n';
return 0;
}