#include #include #include template int oneshot_discretization(std::vector &a) { static_assert(std::is_integral_v); int n = a.size(); std::vector> ordered_a(n); for (int i = 0; i < n; i++) { ordered_a[i] = {a[i], i}; } std::ranges::sort(ordered_a); int j = 0; if (n) { a[ordered_a[0].second] = 0; for (int i = 1; i < n; i++) { j += ordered_a[i - 1].first != ordered_a[i].first; a[ordered_a[i].second] = j; } } return j + 1; }