线段树区间取max区间查询

要线段树资瓷区间max和询问区间和。

设要把[L,R]对mx取max。

我们可以在线段树上二分出小于mx的区间然后变成区间修改了。

具体实现是,维护区间最小值和区间最大值,我们递归进入一个区间,如果这个区间的最小值都大于mx的话就不用管这个区间了。

然后我们假设找到了一个区间被[L,R]包含,那么如果这个区间的最大值小于mx,就直接修改,否则再递归进入他的子区间进行查找。

复制代码
void change(int l, int r, int o, int ql, int qr, int c)
{
    if (mn[o] >= c) return ;
    if (l >= ql and r <= qr) 
    {
        if (mx[o] <= c) {
            mx[o] = mn[o] = lzy[o] = c;
            tr[o] = (r - l + 1) * c;
            return ;
        }
    }
    spread(o, l, r);//下放标记
    int mid = (l + r) >> 1;
    if (ql <= mid) change(l, mid, ls, ql, qr, c);
    if (qr > mid) change(mid + 1, r, rs, ql, qr, c);
    pushup(o);
}
复制代码

 

posted @   zZhBr  阅读(1003)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示