srupのメモ帳

競プロで解いた問題や勉強したことを記録していくメモ帳

ABC 036 C - 座圧

問題

問題概要

座標を圧縮する問題。

解法

与えられた数字を座圧する問題。ソートした後に、重複を消去し、二分探索で元の数字のindexを調べれば、圧縮後の座標がわかる。

ミス

なし。

コード

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector<int> vint;
typedef pair<int,int> pint;
typedef vector<pint> vpint;
#define rep(i,n) for(int i=0;i<(n);i++)
#define reps(i,f,n) for(int i=(f);i<(n);i++)
#define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();it++)
#define all(v) (v).begin(),(v).end()
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define chmax(a, b) a = (((a)<(b)) ? (b) : (a))
#define chmin(a, b) a = (((a)>(b)) ? (b) : (a))
const int MOD = 1e9 + 7;
const int INF = 1e9;

int main(void){
    int n; cin >> n;
    vector<int> a(n);
    rep(i, n) cin >> a[i];
    auto t = a;
    sort(all(t));
    t.erase(unique(all(t)), t.end());
    for(auto u : a){
        cout << lower_bound(all(t), u) - t.begin() << endl;
    }
    return 0;
}