Pagini recente » Cod sursa (job #974386) | Cod sursa (job #2790659) | Cod sursa (job #2052142) | Cod sursa (job #2655508) | Cod sursa (job #2972983)
#include <fstream>
using namespace std;
ifstream ci ("schi.in");
ofstream co ("schi.out");
const int N=200005;
int v[N], arb[N], afis[N], newn=1;
int cuerry (int s,int d,int ind,int k)
{
if (ind>=newn)
{
return ind;
}
if (arb[ind*2]>=k)
{
cuerry(s, (s+d)/2, ind*2, k);
}
else
{
k-=arb[ind*2];
cuerry((s+d)/2+1, d, ind*2+1, k);
}
}
void update (int x)
{
arb[x]--;
while(x>1)
{
x/=2;
arb[x]--;
}
return;
}
int main()
{
int n;
ci >> n;
while (newn<n)
{
newn*=2;
}
for (int i=1; i<=n; i++)
{
ci >> v[i];
arb[newn+i-1]=1;
}
for (int i=newn-1; i>=1; i--)
{
arb[i]=arb[i*2]+arb[i*2+1];
}
for (int i=n; i>=1; i--)
{
int p=cuerry(1, newn, 1, v[i]);
afis[p-newn+1]=i;
update(p);
}
for (int i=1; i<=n; i++)
{
co << afis[i] << "\n";
}
return 0;
}