Pagini recente » Cod sursa (job #329547) | Cod sursa (job #631628) | Cod sursa (job #1942162) | Cod sursa (job #788248) | Cod sursa (job #3132502)
#include <bits/stdc++.h>
using namespace std;
ifstream f("schi.in");
ofstream g("schi.out");
int t[120001], in[30001], poz[30001];
int N, x;
void build(int v, int tl, int tr){
if(tl == tr) t[v] = 1;
else{
int tm = (tl + tr) >> 1;
build(v << 1, tl, tm);
build(v << 1 | 1, tm + 1, tr);
t[v] = t[v << 1] + t[v << 1 | 1];
}
}
int find_poz(int v, int tl, int tr, int k){
if(tl == tr){
t[v]--;
return tl;
}
int tm = (tl + tr) >> 1;
if(t[v << 1] >= k){
t[v]--;
return find_poz(v << 1, tl, tm, k);
}
t[v]--;
return find_poz(v << 1 | 1, tm + 1, tr, k - t[v << 1]);
}
int main(){
f >> N;
build(1, 1, N);
for(int i = 1;i <= N;i++)
f >> in[i];
for(int i = N;i >= 1;i--)
poz[find_poz(1, 1, N, in[i])] = i;
for(int i = 1;i <= N;i++)
g << poz[i] << "\n";
}