Pagini recente » Cod sursa (job #731238) | Cod sursa (job #1030808) | Istoria paginii runda/preoji2011/clasament | Cod sursa (job #2442227) | Cod sursa (job #2047253)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
int n,m,i,a,b,ok,sol,z[100002];
int v[100000], s[100000],poz;
void update(int p, int val)
{
for(;p<=n;p+=p&(-p))
z[p]+=val;
}
int quarry(int p)
{
int r=0;
for(;p>=1;p-=p&(-p))
r+=z[p];
return r;
}
int cauta(int val)
{
int st=1, dr=n, x, mid;
while(st<=dr)
{
mid=(st+dr)/2;
x=quarry(mid);
if(x<val)
st=mid+1;
else
dr=mid-1;
}
return st;
}
int main()
{
fin>>n;
for(i=1;i<=n;i++)
{
fin>>v[i];
update(i, 1);
}
for(i=n;i>=1;i--)
{
poz=cauta(v[i]);
s[poz]=i;
update(poz, -1);
}
for(i=1;i<=n;i++)
fout<<s[i]<<"\n";
fin.close();
fout.close();
return 0;
}