Pagini recente » Cod sursa (job #334907) | Cod sursa (job #2394195) | Cod sursa (job #2365432) | Cod sursa (job #781933) | Cod sursa (job #35356)
Cod sursa(job #35356)
#include <stdio.h>
#define infile "schi.in"
#define outfile "schi.out"
#define NMAX 30002
#define DIMMAX 65600
FILE *fin,*fout;
short int sol[NMAX],v[DIMMAX];
int n,p,poz,k,li,ls;
void build(short int li, short int ls)
{
if(li==ls)
{
v[p]=1;
return;
}
p=2*p;
build(li,((int)li+ls)/2);
p++;
build(((int)li+ls)/2+1,ls);
p=p/2;
v[p]=v[2*p]+v[2*p+1];
}
short int cauta()
{
if(li==ls)
return li;
if(v[2*p]>=poz)
{
p=2*p;
ls=(li+ls)/2;
return cauta();
}
else
{
p=2*p+1;
poz-=v[p-1];
li=(li+ls)/2+1;
return cauta();
}
}
void erase()
{
if(li==ls)
{
v[p]=0;
return;
}
if(poz<=(li+ls)/2)
{
p=2*p;
ls=(li+ls)/2;
erase();
p/=2;
}
else
{
p=2*p+1;
li=(li+ls)/2+1;
erase();
p/=2;
}
v[p]=v[2*p]+v[2*p+1];
}
void solve()
{
int x;
if(!k)
return;
fscanf(fin,"%d",&x);
k--;
solve();
k++;
p=1;
poz=x;
li=0;ls=n-1;
x=cauta();
sol[x]=n-k+1;
p=1;
poz=x;
li=0;ls=n-1;
erase();
}
int main()
{
fin=fopen(infile,"r");
fscanf(fin,"%d",&n);
p=1;
build(0,n-1);
k=n;
solve();
fclose(fin);
fout=fopen(outfile,"w");
for(int i=0;i<n;i++)
fprintf(fout,"%d\n",sol[i]);
fclose(fout);
return 0;
}