library

This documentation is automatically generated by online-judge-tools/verification-helper

View the Project on GitHub rajyan/library

:warning: src/Compress.hpp

Code

#pragma once

#include <vector>

using namespace std;

template<class T>
class Compress {
public:
    Compress() = default;
    explicit Compress(vector<T> vec) : comp(move(vec)) { build(); }

    void add(const T &x) { comp.emplace_back(x); }

    void build() {
        sort(comp.begin(), comp.end());
        comp.erase(unique(comp.begin(), comp.end(), comp.end()));
    }

    [[nodiscard]] vector<int> get(const vector<T> &vec) const {
        vector<int> ret(vec.size());
        transform(vec.begin(), vec.end(), ret.begin(), [&](const T &x) { return get(x); });
        return ret;
    }
    [[nodiscard]] int get(const T &x) const { return lower_bound(comp.begin(), comp.end(), x) - begin(comp); }

    const T &operator[](const int k) const { return comp[k]; }

private:
    vector<T> comp{};
};
#line 2 "src/Compress.hpp"

#include <vector>

using namespace std;

template<class T>
class Compress {
public:
    Compress() = default;
    explicit Compress(vector<T> vec) : comp(move(vec)) { build(); }

    void add(const T &x) { comp.emplace_back(x); }

    void build() {
        sort(comp.begin(), comp.end());
        comp.erase(unique(comp.begin(), comp.end(), comp.end()));
    }

    [[nodiscard]] vector<int> get(const vector<T> &vec) const {
        vector<int> ret(vec.size());
        transform(vec.begin(), vec.end(), ret.begin(), [&](const T &x) { return get(x); });
        return ret;
    }
    [[nodiscard]] int get(const T &x) const { return lower_bound(comp.begin(), comp.end(), x) - begin(comp); }

    const T &operator[](const int k) const { return comp[k]; }

private:
    vector<T> comp{};
};
Back to top page