Pagini recente » Cod sursa (job #1934419) | Istoria paginii runda/rar34 | Istoria paginii runda/kk-kkk/clasament | Cod sursa (job #1443294) | Cod sursa (job #1699895)
#include <iostream>
#include<fstream>
using namespace std;
int i,v[30005],aib[30005],rasp[30005],n,aux,p,m,u,key;
inline int lbit(int x)
{
return (x^(x-1)&x);
}
void update(int x,int val)
{
for(x;x<=n;x+=lbit(x))
aib[x]+=val;
}
int compute(int x)
{
int sum=0;
for(x;x>0;x-=lbit(x))
sum+=aib[x];
return sum;
}
int searchandconquer(int x)
{
p=0;u=n+1;
while(u-p>1)
{
m=(p+u)/2;
key=compute(m);
if(key<x) p=m;
else u=m;
}
return u;
}
int main()
{
ifstream f("schi.in");
ofstream g("schi.out");
f>>n;
for(i=1;i<=n;i++)
{
f>>v[i];
update(i,1);
}
aib[n+1]=(1<<30);
for(i=n;i>=1;i--)
{
aux=searchandconquer(v[i]);
rasp[aux]=i;
update(aux,-1);
}
for(i=1;i<=n;i++)
g<<rasp[i]<<'\n';
return 0;
}