From 0b9204132294ff055b28e380266b13074543c83f Mon Sep 17 00:00:00 2001 From: subcrip Date: Mon, 10 Jun 2024 02:39:08 +0800 Subject: [PATCH] Update string/hash_vec.cc Signed-off-by: subcrip --- string/hash_vec.cc | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/string/hash_vec.cc b/string/hash_vec.cc index 732477a..f5f3646 100644 --- a/string/hash_vec.cc +++ b/string/hash_vec.cc @@ -67,3 +67,25 @@ struct hash_vec { } } }; + +struct range_hash { + vector, MLL>> hp; + template + range_hash(const T& vec) { + hp.emplace_back(); + hash_vec hs(vec.size()); + for (auto&& x : vec) { + hs.push_back(x); + hp.emplace_back(hs.hash()); + } + } + + /// query hash of subarray [l, r]. Index starts from 1. + pair, MLL> range_query(size_t l, size_t r) { + return { + (hp[r + 1].first - hp[l].first * power1[r + 1 - l]), + (hp[r + 1].second - hp[l].second * power2[r + 1 - l]), + }; + } +}; +