Pagini recente » Cod sursa (job #2464678) | Cod sursa (job #2923824) | Cod sursa (job #3138013) | Cod sursa (job #1851632) | Cod sursa (job #3163120)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
const int Nmax=30005;
int n;
int aib[Nmax],v[Nmax];
vector<pair<int,int>> sol;
int lsb(int x)
{
return x&(-x);
}
void update(int poz,int val)
{
for(int i=poz;i<=n;i+=lsb(i))
{
aib[i]+=val;
}
return;
}
int sum(int poz)
{
int s=0;
for(int i=poz;i>=1;i-=lsb(i))
{
s+=aib[i];
}
return s;
}
int bs(int x,int st,int dr)
{
while(st<dr)
{
int mij=(st+dr)/2;
if(x<=sum(mij))
{
dr=mij;
}
else st=mij+1;
}
return st;
}
int main()
{
fin>>n;
for(int i=1;i<=n;i++)
{
fin>>v[i];
update(i,1);
}
for(int i=n;i>=1;i--)
{
int poz=bs(v[i],1,n);
update(poz,-1);
sol.push_back({poz,i});
}
sort(sol.begin(),sol.end());
for(int i=0;i<sol.size();i++)
{
fout<<sol[i].second<<'\n';
}
return 0;
}