2023-02-14 算法学习——树状数组/ST表

树状数组用于解决动态查询区间,单点修改的情况
前缀和用于解决静态区间和的情况
差分用于解决多次修改区间值,最后求和(用前缀和)的情况

st表模板

#include<iostream>
using namespace std;

inline int read()
{
    int x=0,f=1;char ch=getchar();
    while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
    while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
    return x*f;
}

int a[1000010],st[1000010][32];

int query(int l,int r) {
    int k = 0;
    while(1<<k <= r-l+1) k++;k--; //最后多加了一次
    return max(st[l][k],st[r-(1<<k)+1][k]);
}

int main() {
    int n = read(),m = read();
    // cout<<n<<m<<endl;
    for(int i=0;i<n;i++) a[i] = read();

    for(int i=0;i<n;i++) {
        st[i][0] = a[i];
    }
    for(int j=1;(1<<j)<=n;j++)
        for(int i=0;i+(1<<j-1)-1<n;i++) {
            st[i][j] = max(st[i][j-1],st[i+(1<<(j-1))][j-1]);
        }


    while (m--) {
        int l=read(),r=read();
        printf("%d\n",query(l-1,r-1));
    }
    
    return 0;
}
posted @   lovevivi121  阅读(3)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示