把#include<bits/stdc++.h> #define mian main #define QWQ puts("QWQ"); using namespace std; int n, m; int a[50005] ,treex[50005], treen[50005]; int lowbit(int x)//求lowbit:2进制下末尾0的个数。可表示tree中包含数据数量 { return x & -x; } void _add(int x, int k)//建树QAQ { for(;x <= n; x += lowbit(x)) { treex[x] = max(treex[x], k); treen[x] = min(treen[x], k); } } int _findmax(int x, int y)//区间查询最大值 { if(y > x) { if(y - lowbit(y) > x) return max(treex[y], _findmax(x, y - lowbit(y))); else return max(a[y], _findmax(x, y - 1)); } return a[x]; } int _findmin(int x, int y)//区间查询最小值 { if(y > x) { if(y - lowbit(y) > x) return min(treen[y], _findmin(x, y - lowbit(y))); else return min(a[y], _findmin(x, y - 1)); } return a[x]; } int main() { memset(treen, 0x3f3f3f3f, sizeof(treen)); scanf("%d%d", &n, &m); for(int i = 1; i <= n; i ++) { scanf("%d", &a[i]); _add(i, a[i]); } for(int i = 1; i <= m; i ++) { int l, r; scanf("%d%d", &l, &r); cout << _findmax(l, r) - _findmin(l, r) << endl; } return 0; }改写用python
时间: 2024-04-11 19:26:10 浏览: 136
你可以使用以下代码将给定的C++代码转换为等效的Python代码:
```python
def lowbit(x):
return x & -x
def add(x, k):
for i in range(x, n+1, lowbit(x)):
treex[i] = max(treex[i], k)
treen[i] = min(treen[i], k)
def find_max(x, y):
if y > x:
if y - lowbit(y) > x:
return max(treex[y], find_max(x, y - lowbit(y)))
else:
return max(a[y], find_max(x, y - 1))
return a[x]
def find_min(x, y):
if y > x:
if y - lowbit(y) > x:
return min(treen[y], find_min(x, y - lowbit(y)))
else:
return min(a[y], find_min(x, y - 1))
return a[x]
n, m = map(int, input().split())
a = [0] * (n+1)
treex = [0] * (n+1)
treen = [0x3f3f3f3f] * (n+1)
for i in range(1, n+1):
a[i] = int(input())
add(i, a[i])
for i in range(m):
l, r = map(int, input().split())
print(find_max(l, r) - find_min(l, r))
```
请注意,C++ 中的数组索引是从 1 开始的,而 Python 中的列表索引是从 0 开始的。因此,在 Python 代码中,我们将数组 `a`、`treex` 和 `treen` 的大小都增加了 1,并且在循环中的索引调整为从 1 开始。另外,我们将 `memset` 函数替换为 `treen` 列表的初始化操作。
阅读全文