蒟蒻提问 悬关
  • 板块学术版
  • 楼主so_find_skind
  • 当前回复10
  • 已保存回复10
  • 发布时间2023/7/30 09:04
  • 上次更新2023/11/3 06:58:17
查看原帖
蒟蒻提问 悬关
756179
so_find_skind楼主2023/7/30 09:04
#include<bits/stdc++.h>
using namespace std;
int n,m;
int s[400005];
void build(int p,int l,int r){
    if(l==r){
        cin>>s[p];
        return ;
    }
    build(2*p,l,(l+r)/2);
    build(2*p+1,(l+r)/2+1,r);
    s[p]=max(s[2*p],s[2*p+1]);
}
int query(int p,int l,int r,int x,int y){
    if(r<x && l>y)
        return 0;
    if(x<=l && y>=r)
        return s[p];
    if(l==r){
        return 0;
    }
    return max(query(2*p,l,(l+r)/2,x,y),query(2*p+1,(l+r)/2+1,r,x,y));
}
int main(){
    cin>>n>>m;
    build(1,1,n);
    for(int i=1;i<=m;i++){
        int x,y;
        cin>>x>>y;
        cout<<query(1,1,n,x,y)<<"\n";
    }
    return 0;
}

这是某站外提的代码

问询问时的区间最大值

但是在query里面,l==r的情况却能越过前两个判断,实在不知道为何会如此。

求救大佬qaq

2023/7/30 09:04
加载中...