From 17406865e57c8c83f9c6959d1195f8c7f0b1ac94 Mon Sep 17 00:00:00 2001 From: lhz2022 Date: Fri, 14 Aug 2026 22:45:04 +0800 Subject: [PATCH] test1 --- README | 3 ++ main.cpp | 18 ++++++++++ segment_tree.hpp | 76 ++++++++++++++++++++++++++++++++++++++++++ segment_tree_demo.exe | Bin 0 -> 65250 bytes 4 files changed, 97 insertions(+) create mode 100644 main.cpp create mode 100644 segment_tree.hpp create mode 100644 segment_tree_demo.exe diff --git a/README b/README index 980a0d5..fd9fb4b 100644 --- a/README +++ b/README @@ -1 +1,4 @@ Hello World! + + +2026/08/14 diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..daf773e --- /dev/null +++ b/main.cpp @@ -0,0 +1,18 @@ +#include +#include + +#include "segment_tree.hpp" + +int main() { + std::vector arr = {1, 3, 5, 7, 9, 11}; + + SumSegmentTree st = make_sum_segment_tree(arr); + + std::cout << "Sum of [1, 3]: " << st.query(1, 3) << '\n'; // 3 + 5 + 7 = 15 + std::cout << "Sum of [0, 5]: " << st.query(0, 5) << '\n'; // 36 + + st.update(2, 10); // arr[2]: 5 -> 10 + std::cout << "Sum of [1, 3] after update: " << st.query(1, 3) << '\n'; // 3 + 10 + 7 = 20 + + return 0; +} diff --git a/segment_tree.hpp b/segment_tree.hpp new file mode 100644 index 0000000..df9b3e9 --- /dev/null +++ b/segment_tree.hpp @@ -0,0 +1,76 @@ +#pragma once + +#include +#include + +template +class SegmentTree { +public: + SegmentTree(const std::vector& data, Op op, T identity) + : n_(static_cast(data.size())), + op_(std::move(op)), + identity_(identity), + tree_(4 * n_, identity_) { + if (n_ > 0) { + build(data, 0, 0, n_ - 1); + } + } + + T query(int left, int right) const { + return query(0, 0, n_ - 1, left, right); + } + + void update(int index, T value) { + update(0, 0, n_ - 1, index, value); + } + +private: + int n_; + Op op_; + T identity_; + std::vector tree_; + + void build(const std::vector& data, int node, int start, int end) { + if (start == end) { + tree_[node] = data[start]; + return; + } + int mid = start + (end - start) / 2; + build(data, 2 * node + 1, start, mid); + build(data, 2 * node + 2, mid + 1, end); + tree_[node] = op_(tree_[2 * node + 1], tree_[2 * node + 2]); + } + + T query(int node, int start, int end, int left, int right) const { + if (right < start || end < left) { + return identity_; + } + if (left <= start && end <= right) { + return tree_[node]; + } + int mid = start + (end - start) / 2; + return op_( + query(2 * node + 1, start, mid, left, right), + query(2 * node + 2, mid + 1, end, left, right)); + } + + void update(int node, int start, int end, int index, T value) { + if (start == end) { + tree_[node] = value; + return; + } + int mid = start + (end - start) / 2; + if (index <= mid) { + update(2 * node + 1, start, mid, index, value); + } else { + update(2 * node + 2, mid + 1, end, index, value); + } + tree_[node] = op_(tree_[2 * node + 1], tree_[2 * node + 2]); + } +}; + +using SumSegmentTree = SegmentTree>; + +inline SumSegmentTree make_sum_segment_tree(const std::vector& data) { + return SumSegmentTree(data, std::plus{}, 0LL); +} diff --git a/segment_tree_demo.exe b/segment_tree_demo.exe new file mode 100644 index 0000000000000000000000000000000000000000..acb3fe5d82f790144460e09d694df4d21f8766f1 GIT binary patch literal 65250 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 literal 0 HcmV?d00001