#include <bits/stdc++.h>
#include "treasure.h"
using namespace std;
#define sz(x) int(x.size())
#define all(x) begin(x), end(x)
const int LIMIT = 2 * (5e8 + 1);
vector<int> encode(vector<pair<int, int>> P) {
    int n = sz(P);
    vector<int> X(n), Y(n);
    for (int i = 0; i < n; i++) {
        tie(X[i], Y[i]) = P[i];
    }
    sort(all(Y));
    vector<int> S;
    for (int i = 0; i < n; i++) {
        S.push_back(2 * X[i]);
        S.push_back(2 * Y[i] + 1);
    }
    sort(all(P));
    int pref = LIMIT;
    for (int i = 0; i < n; i++) {
        pref += int(lower_bound(all(Y), P[i].second) - begin(Y));
        S.push_back(pref);
    }
    return S;
}
vector<pair<int, int>> decode(vector<int> S) {
    int n = sz(S) / 3;
    vector<int> X, Y, pref = {LIMIT};
    for (int i = 0; i < sz(S); i++) {
        if (S[i] >= LIMIT) {
            pref.push_back(S[i]);
        } else if (S[i] % 2 == 0) {
            X.push_back(S[i] / 2);
        } else {
            Y.push_back(S[i] / 2);
        }
    }
    sort(all(X)), sort(all(Y)), sort(all(pref));
    vector<pair<int, int>> P(n);
    for (int i = 0; i < n; i++) {
        P[i] = {X[i], Y[pref[i + 1] - pref[i]]};
    }
    return P;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |