下面是我的线段树模板,第一篇为纯加法,第二篇为加乘结合。
[code]#include #define MAXN 100010using namespace std;namespace segmentTreeWithoutEternalizing{#define lSon(p) p r || segTree[p].rgt < l) return; // exit because of not inside of the segment if (segTree[p].lft >= l && segTree[p].rgt r || segTree[p].rgt < l) return 0; // exit because of not inside of the segment if (segTree[p].lft >= l && segTree[p].rgt q >> m; vector arr(n); for (int i = 0; i < n; ++i) { cin >> arr; } SegmentTree segTree(n, m); // Initialize the segment tree for (int i = 0; i < n; ++i) { segTree.updateRange(i, i, 1, arr); } while (q--) { int type; cin >> type; int x, y; long long k; if (type == 1) { cin >> x >> y >> k; segTree.updateRange(x - 1, y - 1, k, 0); } else if (type == 2) { cin >> x >> y >> k; segTree.updateRange(x - 1, y - 1, 1, k); } else if (type == 3) { cin >> x >> y; cout |