本juruo看百度上说int为0x3f3f3f3f是10^9就被称作无穷大,那么如果想把数组初始化尽可能的大(例如本题使用树状数组时的最小值数组,这个数组的初始化),那么应该选择0x3f3f3f3f还是2146483647呢
#include<bits/stdc++.h>
using namespace std;
int n, q,j,l;
int treea[50005],treei[50005],a[50005];
int lowbit(int x){
return x & -x;
}
void _add(int x, int k){
for(;x<=n;x+=lowbit(x)){
treea[x]=max(treea[x],k);
treei[x]=min(treei[x],k);
}
}
int _findmax(int x,int y){
if(y>x){
if(y-lowbit(y)>x){
return max(treea[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(treei[y],_findmin(x,y-lowbit(y)));
}
else{
return min(a[y],_findmin(x,y-1));
}
}
return a[x];
}
int main(){
scanf("%d %d",&n,&q);
memset(treei,2146483467,sizeof(treei));
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
_add(i,a[i]);
}
for(int i=1;i<=q;i++){
cin>>j>>l;
printf("%d\n",_findmax(j,l)-_findmin(j,l));
}
}