请教各位大牛inf和2146483647哪个更大
查看原帖
请教各位大牛inf和2146483647哪个更大
1149836
thesadbee楼主2024/4/14 16:52

本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));
    }
}
2024/4/14 16:52
加载中...