用C++攻克“[jrksj r7] 铃音的第二分块”:实现区间操作与查询
```cpp #include <iostream> #include <vector> #include <algorithm> using namespace std; struct Node { int val; int cnt; Node(int v = 0, int c = 0) : val(v), cnt(c) {} }; class SegTree { private: vector<Node> tree; int n; void merge(Node &parent, Node left, Node right) { parent.val = max(left.val, right.val); parent.cnt = left.cnt + right.cnt; if (left.val == parent.val) parent.cnt += left.cnt; if (right.val == parent.val) parent.cnt += right.cnt; } void build(int l, int r, int idx, vector<int> &arr) { if (l == r) { tree[idx] = Node(arr[l]); } else { int mid = (l + r) / 2; build(l, mid, 2 * idx + 1, arr); build(mid + 1, r, 2 * idx + 2, arr); merge(tree[idx], tree[2 * idx + 1], tree[2 * idx + 2]); } } void update(int l, int r, int idx, int pos, int val) { if (l == r) { tree[idx].val -= val; } else { int mid = (l + r) / 2; if (pos <= mid) update(l, mid, 2 * idx + 1, pos, val); else update(mid + 1, r, 2 * idx + 2, pos, val); merge(tree[idx], tree[2 * idx + 1], tree[2 * idx + 2]); } } int query(int l, int r, int idx, int ql, int qr, int val) { if (ql <= l && qr >= r) { return tree[idx].cnt - (tree[idx].val > val ? tree[idx].cnt : 0); } else { int mid = (l + r) / 2; int ans = 0; if (ql <= mid) ans += query(l, mid, 2 * idx + 1, ql, qr, val); if (qr > mid) ans += query(mid + 1, r, 2 * idx + 2, ql, qr, val); return ans; } } public: SegTree(int size) { n = size; tree.resize(4 * size); } void build(vector<int> &arr) { build(0, n - 1, 0, arr); } void update(int pos, int val) { update(0, n - 1, 0, pos, val); } int query(int l, int r, int val) { return query(0, n - 1, 0, l, r, val); } }; int main() { int n, m; cin >> n >> m; vector<int> a(n); for (int i = 0; i < n; ++i) cin >> a[i]; SegTree segTree(n); segTree.build(a); int opt, l, r, x; while (m--) { cin >> opt >> l >> r >> x; --l, --r; if (opt == 1) { segTree.update(l, r, x); } else { cout << segTree.query(l, r, x) << endl; } } return 0; } ``` 这个C++代码实现了题目要求的功能。首先,定义了一个结构体`Node`来存储每个节点的信息,包括当前最大值和小于等于当前最大值的元素个数。然后,定义了一个`SegTree`类来处理区间查询和更新操作。在主函数中,读取输入并构建线段树,接着处理每个操作并输出结果。 ######[AI写代码神器 | 875点数解答 | 2024-07-18 21:08:10]
- Python实现:随机录入45位学生四次成绩函数大揭秘(GPT | 477点数解答 | 2024-12-17 17:00:35)351
- Python实现班级45位同学成绩生成、总评计算及分数统计(字节豆包 | 579点数解答 | 2024-12-21 11:55:01)241
- Python实现45位学生四次成绩随机录入及输出(GPT | 441点数解答 | 2024-12-21 21:02:22)249
- Python实战:45位同学成绩生成、总评计算与分数统计揭秘(字节豆包 | 688点数解答 | 2024-12-22 10:14:17)241
- Python实现Q老师成绩管理任务:修改与查看学生成绩(字节豆包 | 191点数解答 | 2025-12-20 20:55:41)70
- Python 代码助力 Q 老师高效管理班级学生成绩:修改与查看一键搞定(字节豆包 | 326点数解答 | 2025-12-27 20:48:12)70
- C++ 破解 [jrksj r7] 铃音的第二分块难题:区间操作与计数实现(GPT | 500点数解答 | 2024-07-18 21:05:15)260
- [jrksj r7] 挑战:堀北铃音序列的区间操作与查询难题!(阿里通义 | 15点数解答 | 2024-07-18 21:06:45)268
- 用C++攻克“[jrksj r7] 铃音的第二分块”:实现区间操作与查询(阿里通义 | 875点数解答 | 2024-07-18 21:08:10)252
- Python 实现某公司业务员工资按销售额精准计算,附异常处理建议(字节豆包 | 352点数解答 | 2025-03-12 19:16:27)186
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)343
- 补全含错误代码:Vue结合Element UI组件实现查询、新增及表格展示功能 ( | 400点数解答 | 2023-12-19 15:20:50)432