Pagini recente » Cod sursa (job #2792558) | Cod sursa (job #623630) | Cod sursa (job #1259473) | Cod sursa (job #2675483) | Cod sursa (job #2625738)
#include <iostream>
using namespace std;
#define N_LIMIT 30050
int output[N_LIMIT];
int v[N_LIMIT];
int tree[4 * N_LIMIT];
void buildTree(int node, int L, int R) {
if (L == R) {
tree[node] = 1;
}
else {
int mid = (L + R) / 2;
buildTree(node * 2, L, mid);
buildTree(node * 2 + 1, mid + 1, R);
tree[node] = tree[node * 2] + tree[node * 2 + 1];
}
}
void update(int node, int L, int R, int pos, int val) {
if (L == R) {
output[R] = val;
tree[node] = 0;
}
else {
int mid = (L + R) / 2;
if (tree[node * 2] >= pos) {
update(node * 2, L, mid, pos, val);
}
else {
update(node * 2 + 1, mid + 1, R, pos - tree[node * 2], val);
}
tree[node] = tree[node * 2] + tree[node * 2 + 1];
}
}
FILE * fin, * fout;
int main() {
fin = fopen("schi.in","r");
fout = fopen("schi.out","w");
int N;
fscanf(fin,"%d",&N);
buildTree(1, 0, N-1);
for (int i = 0; i < N; i++) {
fscanf(fin,"%d",v+i);
}
for (int i = N - 1; i >= 0; i--) {
update(1, 0, N - 1, v[i], i + 1);
}
for (int i = 0; i < N; i++) {
fprintf(fout,"%d\n",output[i]);
}
fclose(fin);
fclose(fout);
return 0;
}