Pagini recente » Cod sursa (job #200094) | Cod sursa (job #221049) | Cod sursa (job #407549) | Cod sursa (job #2174757) | Cod sursa (job #3041931)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("schi.in");
ofstream out("schi.out");
int v[30005],arb[120005], clasament[30005];
void build(int nod, int st, int dr)
{
if(st==dr)
{
arb[nod]=1;
return;
}
int m=(st+dr)/2;
build(2*nod,st,m);
build(2*nod+1,m+1,dr);
arb[nod]=arb[2*nod]+arb[2*nod+1] ;
}
int pozitie(int nod, int st, int dr, int conc)
{
if(st==dr)
{
arb[nod]--;
//cout<<st<<" ";
return st;
}
int m=(st+dr)/2 ,rez;
if(arb[2*nod]>=conc)
{
rez=pozitie(2*nod,st,m,conc);
}
else
{
rez= pozitie(2*nod+1,m+1,dr,conc-arb[2*nod]);
}
arb[nod]--;
return rez;
}
int main()
{
int n;
in>>n;
build(1,1,n);
for(int i=1; i<=n ; i++)
in>>v[i];
for(int i=n; i>=1;i--)
{
clasament[pozitie(1,1,n,v[i])]=i;
/*for(int j=1; j<=2*n-1; j++)
cout<<arb[j]<<" ";
cout<<endl;*/
}
for(int i=1; i<=n;i++)
{
out<<clasament[i]<<"\n";
}
return 0;
}