Pagini recente » Cod sursa (job #2114299) | Cod sursa (job #2647025) | Cod sursa (job #859853) | Cod sursa (job #2550646) | Cod sursa (job #2104788)
#include <fstream>
using namespace std;
ifstream F("schi.in");
ofstream G("schi.out");
int v[30004], arb[4*30002], n, poz[30004];
void Build( int l, int r, int rad )
{
if(l==r)
{
arb[rad] = 1;
return;
}
int mid = (l+r)/2;
Build(l, mid, rad*2);
Build(mid+1, r, rad*2+1);
arb[rad] = arb[2*rad]+arb[2*rad+1];
}
int Query(int l, int r, int rad, int sum)
{
arb[rad]--;
int mid = (l+r)/2;
if(l==r) return l;
if( sum <= arb[2*rad] ) return Query(l, mid, 2*rad, sum);
return Query(mid+1, r, 2*rad+1, sum-arb[2*rad]);
}
int main()
{
F >> n;
for( int i = 1; i <= n; ++ i ) F >> v[i];
Build(1, n, 1);
for( int i = n; i > 0; -- i )
{
poz[Query(1, n, 1, v[i])] = i;
}
for( int i = 1; i <= n; ++ i ) G << poz[i]<<'\n';
return 0;
}