Pagini recente » Cod sursa (job #268175) | Cod sursa (job #2921745) | Cod sursa (job #220117) | Cod sursa (job #1941773) | Cod sursa (job #2101718)
#include <fstream>
using namespace std;
ifstream F("schi.in");
ofstream G("schi.out");
int n, v[30005], ans[30005], a[4*30005];
void upd( int st, int dr, int rad )
{
if( st == dr )
{
a[rad] = 1;
return;
}
int mij = (st+dr)/2;
upd(st, mij, 2*rad);
upd(mij+1, dr, 2*rad+1);
a[rad] = a[2*rad] + a[2*rad+1];
}
int caut( int st, int dr, int rad, int sum )
{
a[rad]--;
int mij = (st + dr)/2;
if( st == dr ) return st;
if( sum <= a[2*rad] ) return caut(st, mij, 2*rad, sum);
else return caut(mij+1, dr, 2*rad+1, sum-a[2*rad]);
}
int main()
{
F >> n;
upd( 1, n, 1 );
for( int i = 1; i <= n; ++ i ) F >> v[i];
for( int i = n; i > 0; -- i )
ans[caut(1, n, 1, v[i])] = i;
for( int i = 1; i <= n; ++ i ) G << ans[i] << '\n';
return 0;
}