Pagini recente » Cod sursa (job #1371759) | Cod sursa (job #2164909) | Cod sursa (job #178753) | Cod sursa (job #3201084) | Cod sursa (job #1826486)
//Schi
#include <fstream>
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
#define MAX 30005
int ArbInt[MAX*4], poz[MAX];
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 + 1, poz, val, mid + 1, dr);
else
update(2*nod , poz, val, st, mid);
ArbInt[nod] = ArbInt[2*nod] + ArbInt[2*nod + 1];
}
int query(int nod, int val, int st, int dr) {
if(st == dr){
return dr;
}
int mid = (st + dr) / 2;
if(val > ArbInt[2*nod])
return query(2*nod + 1, val - ArbInt[2*nod], mid + 1 , dr);
else
return query(2*nod, val, st, mid);
}
int main(){
int N, i, v[MAX], x;
fin>>N;
for(i = 1 ; i <= N ; i++){
fin>>v[i];
update(1, i, 1, 1, N);
}
for(i = N;i >= 1; i--){
x = query(1, v[i], 1, N);
poz[x] = i;
update(1, x, 0, 1, N);
}
for(i = 1;i <= N; i++){
fout<<poz[i]<<"\n";
}
fin.close();
fout.close();
return 0;
}