けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

鉄則本 A15 - Compression (3Q, ★3)

座標圧縮せよ、という問題

問題概要

長さ  N の数列  A_{1}, A_{2}, \dots, A_{N} が与えられるので、座標圧縮せよ。

制約

  •  1 \le N \le 10^{5}

考えたこと

座標圧縮は次の記事に詳しく書いた。

drken1215.hatenablog.com

コード

#include <bits/stdc++.h>
using namespace std;

int main() {
    int N;
    cin >> N;
    vector<int> A(N), B;
    for (int i = 0; i < N; i++) cin >> A[i];

    B = A;
    sort(B.begin(), B.end());
    B.erase(unique(B.begin(), B.end()), B.end());
    for (auto a : A) {
        cout << lower_bound(B.begin(), B.end(), a) - B.begin() + 1 << " ";
    }
    cout << endl;
}