Pagini recente » Cod sursa (job #3363044) | Cod sursa (job #3362992) | Cod sursa (job #3363033) | Cod sursa (job #3362974) | Cod sursa (job #3362980)
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
int v[30003];
vector <int> segtree(400001);
int rez[30001];
int n;
int cn;
void build(int node) {
if (node>=n) segtree[node]=1;
else {
build(node*2);
build(node*2+1);
segtree[node]=segtree[node*2]+segtree[node*2+1];
}
}
void update(int a) {
a+=n-1;
segtree[a]--;
a/=2;
while (a>=1) {
segtree[a]--;
a/=2;
}
}
int query(int poz, int start, int end, int node) {
int mij=(start+end)/2;
if (node>=n) {
return node-n+1;
}
if (segtree[2*node]<poz) {
return query(poz-segtree[2*node], mij+1, end, 2*node+1);
}else {
return query(poz, start, mij, 2*node);
}
}
int main() {
fin >> n;
for (int i=1;i<=n;i++) {
fin >> v[i];
}
cn=n;
int aux=log2(n);
if (n==pow(2,aux)) {
aux--;
}
n=pow(2,(aux+1));
build(1);
for (int i=cn;i>=1;i--) {
int aux=query(v[i],1,n,1);
update(aux);
rez[aux]=i;
}
for (int i=1;i<=cn;i++) {
fout << rez[i] << '\n';
}
return 0;
}