Pagini recente » Cod sursa (job #190914) | Cod sursa (job #966053) | Cod sursa (job #1574906) | Monitorul de evaluare | Cod sursa (job #3164920)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
const int N=1<<16;
int aint[N];
struct vec
{
int poz;
int val;
};
vec v[30001];
int x;
void cerinta(int st,int dr,int p,int a,int& b)
{
if(a<=st && dr<=b)
{
b=b+aint[p];
}
else
{
int mij=(st+dr)/2,rs=0,rd=0;
if(a<=mij)cerinta(st,mij,2*p,a,b);
if(b>mij)cerinta(mij+1,dr,2*p+1,a,b);
}
}
void actualizare(int st,int dr,int p,int x)
{
if(st==dr)
{
aint[p]=1;
}
else
{
int mij=(st+dr)/2,fs=2*p,fd=2*p+1;
if(x<=mij)actualizare(st,mij,fs,x);
else actualizare(mij+1,dr,fd,x);
aint[p]=aint[fs]+aint[fd];
}
}
int main()
{
int n;
fin>>n;
for(int i=1;i<=n;i++)
{
fin>>v[i].val;
v[i].poz=i;
}
for(int i=n;i>=1;i--)
{
x=v[i].val;
int rez1=-1,x2,rez2;
cerinta(1,n,1,1,x);
actualizare(1,n,1,x);
v[i].val=x;
}
for(int i=1;i<n;i++)
for(int j=i+1;j<=n;j++)
{
if(v[i].val>v[j].val)
swap(v[i],v[j]);
}
for(int i=1;i<=n;i++)
{
fout<<v[i].poz<<'\n';
}
}