//配列の数値が小さい順に0-indexedでナンバリングする(同種なら同じ値)
//配列を書き換えるので、必要ならばあらかじめ圧縮前の配列を別に保存しておく
template <typename T>
void press(vector<T> &A)
{
    vector<T> sorted = A;
    sort(sorted.begin(), sorted.end());
    auto itr = unique(sorted.begin(), sorted.end());
    sorted.erase(itr, sorted.end());
    for (int i = 0; i < A.size(); i++)
        A[i] = lower_bound(sorted.begin(), sorted.end(), A[i]) - sorted.begin();
    return;
}
    
    
© 2020 kacho65535