Pagini recente » Cod sursa (job #1695282) | Cod sursa (job #2080634) | Cod sursa (job #1207488) | Cod sursa (job #1979036) | Cod sursa (job #1235330)
#include<fstream>
#define FOR(a,b,c) for(register int a=b;a<=c;++a)
#define ROF(a,b,c) for(register int a=b;a>=c;--a)
#define N 100100
using namespace std;
ifstream f("schi.in");
ofstream g("schi.out");
int sol[N],v[N],n,A[N];
void upd(int x,int y)
{
for(;x<=n;x+=x&-x)
A[x]+=y;
}
int sum(int x)
{
int sum=0;
for(;x;x-=x&-x)
sum+=A[x];
return sum;
}
int cb(int p)
{
int st=1,dr=n,sol=n;
while(st<=dr)
{
int mij=(st+dr)>>1;
if(sum(mij)>=p)
{
sol=mij;
dr=mij-1;
}
else
st=mij+1;
}
return sol;
}
int main ()
{
f>>n;
FOR(i,1,n)
f>>v[i];
FOR(i,1,n)
upd(i,1);
ROF(i,n,1)
{
int aux=cb(v[i]);
upd(aux,-1);
sol[aux]=i;
}
FOR(i,1,n)
g<<sol[i]<<"\n";
return 0;
}