Pagini recente » Cod sursa (job #1190043) | Cod sursa (job #1818175) | Cod sursa (job #2205536) | Cod sursa (job #1280614) | Cod sursa (job #2754574)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream cin ("schi.in");
ofstream cout ("schi.out");
const int Nmax = 30000;
vector<int> tree(4*Nmax);
void form_tree(int node, int l, int r, const int poz){
if(l == r){
tree[node] = 1;
return;
}
int mid = (l + r) / 2;
if(poz <= mid)
form_tree(node * 2, l, mid, poz);
else
form_tree(node * 2 + 1, mid + 1, r, poz);
tree[node] = tree[node * 2] + tree[node * 2 + 1];
}
int query(int node, int l, int r, const int val){
if(l == r){
tree[node] = 0;
return l;
}
int mid = (l + r) / 2, place;
if(val <= tree[node * 2])
place = query(node * 2, l, mid, val);
else
place = query(node * 2 + 1, mid + 1, r, val - tree[node*2]);
tree[node] = tree[node * 2] + tree[node * 2 + 1];
return place;
}
int main() {
int nrC;
cin >> nrC;
vector<int> clasament_int(nrC + 1);
vector<int> clasament_fin(nrC + 1);
for (int i = 1; i <= nrC; ++ i) {
int x;
cin >> x;
clasament_int.push_back(x);
form_tree(1, 1, nrC, i);
}
for(int j = nrC; j > 0; j--){
clasament_fin[ query(1, 1, nrC, clasament_int[j])] = j;
}
for(int i = 1; i <= nrC; i++){
cout<<clasament_fin[i]<<"\n";
}
return 0;
}