Pagini recente » Cod sursa (job #1115059) | Cod sursa (job #3178567) | Cod sursa (job #828290) | Cod sursa (job #2494973) | Cod sursa (job #587254)
Cod sursa(job #587254)
#include <cstdio>
#include <fstream>
using namespace std;
#define N 32768
int adi[N<<2];
int p;
void init (int k,int ft,int bk,int x){
if(ft==bk){
adi[k]=1;
return;
}
int md=(ft+bk)>>1;
if(x<=md)
init(k<<1,ft,md,x);
else
init((k<<1)+1,md+1,bk,x-adi[k<<1]);
adi[k]=adi[k<<1]+adi[(k<<1)+1];
}
void srch (int k,int ft,int bk,int x){
if(ft==bk){
p=bk;
adi[k]=0;
return;
}
int md=(ft+bk)>>1 ;
if(x<=adi[k<<1])
srch(k<<1,ft,md,x);
else
srch((k<<1)+1,md+1,bk,x-adi[k<<1]);
adi[k]=adi[k<<1]+adi[(k<<1)+1];
}
int main()
{
int n,r[N],v[N];
ifstream in ("schi.in");
in>>n;
for(int i=1;i<=n;++i){
in>>v[i];
init(1,1,n,i);
}
for(int i=n;i;--i){
srch(1,1,n,v[i]);
r[p]=i;
}
freopen ("schi.out","w",stdout);
for(int i=1;i<=n;++i)
printf("%d\n",r[i]);
return 0;}