在update函数的else分支中,更新左子树和右子树时应该传递参数x而不是k。请将以下行代码:
```
update(2*u,L,mid,l,r,x);
update(2*u+1,mid+1,R,l,r,x);
```
更正为:
```
update(2*u,L,mid,l,r,x);
update(2*u+1,mid+1,R,l,r,x);
```
不知道对不对……
by __Sam__ @ 2024-04-25 21:56:47
@[smile_jyc](/user/1246532) 等等,好像是一样的……
by __Sam__ @ 2024-04-25 21:57:56
怎么感觉像jpt
by shin_chan_jiang @ 2024-04-25 21:59:37
@[smile_jyc](/user/1246532) 你试试我这个,应该可以,函数写的很清楚了
```
#include <iostream>
#include <vector>
#include <limits>
using namespace std;
// 更新数列中某一段的值
void updateSegment(vector<int>& nums, int left, int right) {
for (int i = left; i <= right; i++) {
nums[i]++;
}
}
// 查询数列中某一段的最小值
int querySegmentMin(const vector<int>& nums, int left, int right) {
int minVal = numeric_limits<int>::max();
for (int i = left; i <= right; i++) {
minVal = min(minVal, nums[i]);
}
return minVal;
}
int main() {
int n, m;
cin >> n >> m;
vector<int> nums(n);
for (int i = 0; i < n; i++) {
cin >> nums[i];
}
for (int i = 0; i < m; i++) {
int operation, left, right;
cin >> operation >> left >> right;
if (operation == 1) {
updateSegment(nums, left - 1, right - 1);
} else if (operation == 2) {
int minVal = querySegmentMin(nums, left - 1, right - 1);
cout << minVal << endl;
}
}
return 0;
}
```
by __Sam__ @ 2024-04-25 22:00:38
@[__Sam__](/user/825033)
首先,这段代码很明显是 AI 生成的
其次,这是个暴力代码,lz 要的是线段树啊
by xsmfollower @ 2024-04-25 22:07:22
@[xsmfollower](/user/1308728) 是的
by __Sam__ @ 2024-04-25 22:09:04
@[xsmfollower](/user/1308728) 暴力也不是不行
~~吧~~
by __Sam__ @ 2024-04-25 22:09:43
“n<=100000”“暴力也不是不行吧”
by xsmfollower @ 2024-04-25 22:11:20
@[smile_jyc](/user/1246532) https://www.luogu.com/paste/h1vb4lf6
by focus_costan1 @ 2024-04-25 22:51:19
@[__Sam__](/user/825033) 发 ai 生成的代码前自己先验证一下啊喂
by Hatsunatsu @ 2024-04-26 07:08:53