Pagini recente » Cod sursa (job #3352547) | Borderou de evaluare (job #1472240) | Cod sursa (job #3339846) | Cod sursa (job #1482850) | Cod sursa (job #3320048)
//
// main.cpp
// Schi
//
// Created by Andrada Minca on 04.11.2025.
//
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("schi.in");
ofstream cout("schi.out");
vector<int> aib;
int lsb(int x)
{
return (x&(-x));
}
void update(int x,int add)
{
for(int i=x;i<aib.size();i+=lsb(i))
{
aib[i]+=add;
}
}
long long query(int x)
{
long long sum=0;
for(int i=x;i>0;i-=lsb(i))
{
sum+=aib[i];
}
return sum;
}
int bs(long long s)
{
int ans=0;
long long sum=0;
for(int pas=(1<<17);pas>0;pas/=2)
{
if(ans+pas+1<aib.size()&&sum+aib[ans+pas]<s)
{
ans+=pas;
sum+=aib[ans];
}
}
if(query(ans+1)==s)
{
return ans+1;
}
else return -1;
}
int main()
{
int n;
cin>>n;
aib.resize(n+1);
vector<int> v(n+1),ans(n+1);
for(int i=n;i>0;i--)
{
int x;
cin>>x;
v[i]=x;
update(n-i+1,1);
}
for(int i=1;i<=n;i++)
{
//cerr<<"linia 64";
int poz=bs(v[i]);
//cerr<<"linia 66";
update(poz,-1);
ans[poz]=n-i+1;
}
for(int i=1;i<=n;i++)
{
cout<<ans[i]<<'\n';
}
return 0;
}