This documentation is automatically generated by online-judge-tools/verification-helper
#include "src/algorithm/compression.hpp"
長さ $N$ の列 $A$ について以下の情報を管理します
zawa::compression<T>(const std::vector<T>& as)
as
入力int zawa::compression<T>::operator[](const T& val)
val
が $A$ の要素で何番目に小さいかを返す。0-indexedint zawa::compression<T>::get(std::size_t i)
std::size_t zawa::compression<T>::size()
#pragma once
#include <vector>
#include <algorithm>
namespace zawa {
template <class T>
class compression {
private:
std::vector<T> as;
std::vector<T> uniqued;
public:
compression(const std::vector<T>& as) : as(as), uniqued(as) {
std::sort(uniqued.begin(), uniqued.end());
uniqued.erase(std::unique(uniqued.begin(), uniqued.end()), uniqued.end());
}
int operator[](const T& val) {
return std::lower_bound(uniqued.begin(), uniqued.end(), val) - uniqued.begin();
}
int get(std::size_t i) {
return (*this)[as[i]];
}
std::size_t size() {
return uniqued.size();
}
};
} // namespace zawa
#line 2 "src/algorithm/compression.hpp"
#include <vector>
#include <algorithm>
namespace zawa {
template <class T>
class compression {
private:
std::vector<T> as;
std::vector<T> uniqued;
public:
compression(const std::vector<T>& as) : as(as), uniqued(as) {
std::sort(uniqued.begin(), uniqued.end());
uniqued.erase(std::unique(uniqued.begin(), uniqued.end()), uniqued.end());
}
int operator[](const T& val) {
return std::lower_bound(uniqued.begin(), uniqued.end(), val) - uniqued.begin();
}
int get(std::size_t i) {
return (*this)[as[i]];
}
std::size_t size() {
return uniqued.size();
}
};
} // namespace zawa