Pagini recente » Cod sursa (job #1879335) | Cod sursa (job #1073254) | Cod sursa (job #1894130) | Cod sursa (job #3342359) | Cod sursa (job #3311832)
#include <fstream>
using namespace std;
ifstream cin ("schi.in");
ofstream cout ("schi.out");
const int Size=300001;
int v[Size];
int dp[4*Size];
int position;
int res[Size];
void update(int pos)
{
dp[pos]=dp[pos*2]+dp[pos*2+1];
if(pos==1)
return;
update(pos/2);
}
void Search(int Node,int st, int dr,int s )
{
if(st==dr)
{
position=Node;
dp[Node]=0;
update(Node/2);
return;
}
int mij=(st+dr)/2;
if(s>dp[2*Node])
Search(2*Node+1,st,mij,s-dp[2*Node]);
else
Search(2*Node,mij+1,dr,s);
}
int main()
{
int n;
cin>>n;
int Power=1;
while(n>Power)
Power=(Power<<1);
for(int i=1;i<=n;i++){
cin>>v[i];
dp[i+Power-1]=1;
}
for(int i=Power;i<n+Power;i++)
update(i/2);
for(int i=n;i>=1;i--)
{
Search(1,1,n,v[i]);
res[position-Power]=i;
}
for(int i=0;i<n;i++)
cout<<res[i]<<' ';
return 0;
}