Pagini recente » Cod sursa (job #407715) | Borderou de evaluare (job #3126189) | Cod sursa (job #1569328) | Cod sursa (job #2646051) | Cod sursa (job #2956258)
//ALEXANDRU MICLEA
#include <vector>
#include <algorithm>
#include <string>
#include <cstring>
#include <queue>
#include <map>
#include <set>
#include <unordered_map>
#include <time.h>
#include <iomanip>
#include <deque>
#include <math.h>
#include <cmath>
#include <assert.h>
#include <stack>
#include <bitset>
#include <random>
#include <chrono>
#include <iostream>
#include <array>
#include <fstream>
//typedef long long ll;
//typedef unsigned long long ull;
//typedef long double ld;;
//typedef pair <int, int> pii;
//typedef pair <ll, ll> pll;
//typedef pair <double, double> pdd;
//typedef vector<ll> vll;
//typedef vector<int> vi;
//typedef vector<vector<int> > vvi;
//typedef vector<vector<ll> > vvll;
//typedef vector<vector<pll> > vvpll;
//typedef vector<pll> vpll;
//typedef vector<pii> vpii;
//const ll MOD = 1e9 + 7;
//double eps = 1e-6;
//#define forn(i,e) for(ll i = 1; i <= e; i++)
//#define for0n(i,e) for(ll i = 0; i < (e); i++)
//#define forsn(i,s,e) for(ll i = s; i <= e; i++)
//#define rforn(i,s) for(ll i = s; i >= 1; i--)
//#define rfor0n(i,s) for(ll i = s; i >= 0; i--)
//#define rforsn(i,s,e) for(ll i = s; i >= e; i--)
//#define ln "\n"
//#define dbg(x) fout<<#x<<" = "<<x<<ln
//#define mp make_pair
//#define pb push_back
//#define fi first
//#define se second
//#define llinf 2e18
//#define iinf 1e9
//#define all(x) (x).begin(), (x).end()
//#define sz(x) ((ll)(x).size())
using namespace std;
ifstream fin("schi.in"); ofstream fout("schi.out");
//ifstream fin("input.in"); ofstream fout("output.out");
//VARIABLES
int v[100005];
int ans[100005];
int arb[400005];
//FUNCTIONS
void init(int nod, int st, int dr, int pos) {
if (st == dr) {
arb[nod] = 1;
return;
}
int mid = (st + dr) / 2;
if (pos <= mid) {
init(nod * 2, st, mid, pos);
}
else {
init(nod * 2 + 1, mid + 1, dr, pos);
}
arb[nod] = arb[nod * 2] + arb[nod * 2 + 1];
}
void update(int nod, int st, int dr, int pos, int val) {
if (st == dr) {
arb[nod] = 0;
ans[st] = val;
return;
}
int mid = (st + dr) / 2;
if (pos <= arb[nod * 2]) {
update(nod * 2, st, mid, pos, val);
}
else {
update(nod * 2 + 1, mid + 1, dr, pos - arb[nod * 2], val);
}
arb[nod] = arb[nod * 2] + arb[nod * 2 + 1];
}
//MAIN
int main() {
int n; fin >> n;
for (int i = 1; i <= n; i++) {
fin >> v[i];
init(1, 1, n, i);
}
for (int i = n; i >= 1; i--) {
update(1, 1, n, v[i], i);
}
for (int i = 1; i <= n; i++) fout << ans[i] << '\n';
return 0;
}