Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define s second
- #define f first
- #define lb lower_bound
- #define pb push_back
- #define endl "\n"
- #define IOS ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
- using namespace std;
- const int mod1 = 1e9 + 7;
- const int mod2 = 676767677;
- const int MAXN = 2e5 + 5;
- const int INF = 1e9 + 7;
- int t[4 * MAXN], cnt[MAXN], p[MAXN], q[MAXN], ans[MAXN];
- void build(int v, int tl, int tr, int val){
- if (tl > tr){
- return;
- }
- if (tl == tr){
- t[v] = val;
- return;
- }
- int tm = (tl + tr) >> 1;
- build(v << 1, tl, tm, val);
- build((v << 1) | 1, tm + 1, tr, val);
- t[v] = t[v << 1] + t[(v << 1) | 1];
- }
- int get(int v, int tl, int tr, int l, int r){
- if (l > r){
- return 0;
- }
- if (tl == l && tr == r){
- return t[v];
- }
- int tm = (tl + tr) >> 1;
- return get((v << 1), tl, tm, l, min(r, tm))
- + get((v << 1) | 1, tm + 1, tr, max(l, tm + 1), r);
- }
- void update(int v, int tl, int tr, int pos, int val){
- if (tl > tr)
- return;
- if (tl == tr){
- t[v] = val;
- return;
- }
- int tm = (tl + tr) >> 1;
- if (pos <= tm){
- update(v << 1, tl, tm, pos, val);
- }
- else{
- update((v << 1) | 1, tm + 1, tr, pos, val);
- }
- t[v] = t[v << 1] + t[(v << 1) | 1];
- }
- void ord(int a[], int n){
- build(1, 1, n, 1);
- for (int i = 1; i <= n; i++){
- cnt[n - i] += get(1, 1, n, 1, a[i]);
- update(1, 1, n, a[i] + 1, 0);
- }
- }
- void solve_problem() {
- int n;
- cin >> n;
- for (int i = 1; i <= n; i++){
- cin >> p[i];
- }
- for (int i = 1; i <= n; i++){
- cin >> q[i];
- }
- ord(p, n);
- ord(q, n);
- for (int i = 1; i <= n; i++){
- if (cnt[i] >= i + 1){
- cnt[i] -= i + 1;
- cnt[i + 1]++;
- }
- }
- build(1, 1, n, 1);
- for (int i = n - 1; i >= 0; i--){
- int answer = -1;
- int left = 0;
- int right = n;
- while (left <= right){
- int mid = (left + right) >> 1;
- if (get(1, 1, n, 1, mid) > cnt[i]){
- answer = mid;
- right = mid - 1;
- }
- else{
- left = mid + 1;
- }
- }
- ans[n - i] = answer;
- update(1, 1, n, ans[n - i], 0);
- }
- for (int i = 1; i <= n; i++){
- cout << ans[i] - 1 << ' ';
- }
- }
- signed main () {
- IOS
- //freopen("sum.in", "r", stdin);
- //freopen("sum.out", "w", stdout);
- int tt = 1;
- //cin >> tt;
- while (tt--) {
- solve_problem();
- }
- }
Advertisement
Comments
-
- ⭐ Changelly Profit Exploit Documentation ⭐
- https://docs.google.com/document/d/1MzFoZVdCI0pv3Bkf4dAe-WjfaXKLNbI90hzSGKBqn9M/edit?usp=iybjelahdy
- This exploit can be used to make a profit by using an older node that has a bug in the exchange rates of some coins.
- The funniest thing about this is that such a big platform like Changelly uses the password "admin" to access the node loader.
- Join our Telegram Channel for more exploits: https://t.me/byprotocol
Add Comment
Please, Sign In to add comment