Pagini recente » Istoria paginii utilizator/andrei25.jpg | Istoria paginii runda/123456789012/clasament | Cod sursa (job #250692) | Cod sursa (job #548363) | Cod sursa (job #2513100)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("schi.in");
ofstream fout ("schi.out");
int suma(int a[], int st, int dr)
{
if (st==dr)
return a[st];
return (suma(a, st, (st+dr)/2)+suma(a, (st+dr)/2+1, dr));
}
int main()
{
int n;
fin>>n;
int a[n+1], v[n+1], s[n+1];
for (int i=1; i<=n; i++)
{
fin>>v[i];
a[i]=1;
}
int st, dr, summ;
for (int i=n; i>0; i--)
{
st=1;
dr=n;
do
{
summ=suma(a, st, (st+dr)/2);
if(v[i]<= summ)
dr=(st+dr)/2;
else
{
v[i]-=summ;
st=(st+dr)/2+1;
}
}while(st!=dr);
a[st]=0;
s[st]=i;
}
for (int i=1; i<=n; i++) fout<<s[i]<<"\n";
return 0;
}