Pagini recente » Cod sursa (job #743878) | Cod sursa (job #2726759) | Cod sursa (job #2107672) | Cod sursa (job #2838839) | Cod sursa (job #1826404)
//Schi
#include <fstream>
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
#define DMAX 30005
int ArbInt[4*DMAX];
int poz[DMAX];
void update(int nod, int poz, int val, int st, int dr) {
if(st == dr) {
ArbInt[nod] = val;
return;
}
int mid = (st + dr)/2;
if(poz <= mid) update(2*nod, poz, val, st, mid);
else update(2*nod + 1, poz, val, mid + 1, dr);
ArbInt[nod] = ArbInt[2*nod] + ArbInt[2*nod + 1];
}
int query(int nod, int val, int st, int dr) {
if(st == dr)
return st;
int mid = (st + dr)/2;
if(val <= ArbInt[2*nod])
return query(2*nod, val, st, mid);
else
return query(2*nod + 1, val - ArbInt[2*nod], mid + 1, dr);
}
int main()
{
int N, i;
int v[DMAX];
fin>>N;
for(i = 1 ; i <= N ; i++) {
fin>>v[i];
update(1, i, 1, 1, N);
}
for(i = N ; i >= 1 ; i--) {
int sol = query(1, v[i], 1, N);
poz[sol] = i;
update(1, sol, 0, 1, N);
}
for(i = 1 ; i <= N ; i++)
fout<<poz[i]<<endl;
fin.close();
fout.close();
return 0;
}