Pagini recente » Cod sursa (job #1015950) | Cod sursa (job #1749515) | Cod sursa (job #2889663) | Cod sursa (job #2567604) | Cod sursa (job #1580706)
#include <fstream>
using namespace std;
ifstream f("schi.in");
ofstream g("schi.out");
int i,T,N,K,P,v[100005],r[120005],aint[120005],maxi;
void build(int st,int dr,int pos)
{
if (st > dr || pos > N << 2)
return;
if (st == dr)
aint[pos]=1;
else
{
int mij=(st+dr)>>1;
build(st,mij,pos<<1);
build(mij+1,dr,(pos<<1)+1);
aint[pos]=aint[pos<<1]+aint[(pos<<1)+1];
}
}
void update(int st,int dr,int pos,int val)
{
if (st > dr || pos > N << 2)
return;
if (st == dr)
{
r[st]=i;
aint[pos]=0;
}
int mij=(st+dr)>>1;
if (val <= aint[pos<<1])
update(st,mij,pos<<1,val);
else
update(mij+1,dr,(pos<<1)+1,val-aint[pos<<1]);
aint[pos]=aint[pos<<1] + aint[(pos<<1)+1];
}
int main()
{
f>>N;
for (i=1;i<=N;++i)
f>>v[i];
build(1,N,1);
for(i=N;i;--i)
{
update(1,N,1,v[i]);
}
for (i=1;i<=N*4;++i)
if (r[i])
g<<r[i]<<'\n';
return 0;
}