树状数组求区间最大值和最小值
时间: 2024-02-01 22:10:24 浏览: 314
求最大值和最小值
树状数组是一种用于高效维护前缀和的数据结构,可以用来求解区间最大值和最小值。下面是两种使用树状数组求解区间最大值和最小值的算法:
1. 使用树状数组维护区间最大值的算法:
```cpp
void updata(int i, int val) {
while (i <= n) {
h[i] = max(h[i], val);
i += lowbit(i);
}
}
```
2. 使用树状数组维护区间最小值的算法:
```cpp
void updata(int x) {
int lx, i;
while (x <= n) {
h[x] = a[x];
lx = lowbit(x);
for (i=1; i<lx; i<<=1)
h[x] = min(h[x], h[x-i]);
x += lowbit(x);
}
}
```
这两种算法都是通过不断更新树状数组中的元素来维护区间的最大值或最小值。其中,lowbit(x)函数用于计算x的最低位1所代表的值。
阅读全文