美文网首页
2023-02-14 算法学习——树状数组/ST表

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

作者: Lovevivi | 来源:发表于2024-03-01 21:30 被阅读0次

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

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;
}

相关文章

  • 线段树 + 树状数组 + ST表 模板

    线段树 区间修改+区间求和 logN 树状数组 区间求和+单点修改 logN ST表 离线查询区间最值 构造Nlo...

  • 树状数组求逆序对原理

    归并排序和树状数组都可以用nlogn的算法做到求出逆序对.但这里着重讲树状数组的原理与求法.树状数组最常用的方面就...

  • 算法之树状数组

    搬运(博主写的十分通俗易懂,可以再结合百度百科树状数组的demo一起看,适合初学者):http://www.cnb...

  • 数据结构(二)

    树状数组 POJ 1990: MooFest关于x坐标建立树状数组。先按照v值升序排序,逐个添加到树状数组里。每次...

  • 重温:数据结构与算法 - 03数组

    数据结构与算法之美 - 数组 数据结构与算法之美-学习大纲 什么数组? 数组是一种 线性表 数据结构。它用一组 连...

  • 三种一维树状数组

    单点修改+区间查询 最基本的树状数组 树状数组入门 模板(洛谷P3374 【模板】树状数组1) 区间修改+单点查询...

  • 49.算法->反转数组

    day2:算法->反转数组[https://leetcode-cn.com/problems/reverse-st...

  • 树状结构转一维数组

    树状结构转数组方法 声明树状对象

  • 树状数组模板

    0X00 理解树状数组 没有学习过的同学可以看这个视频:树状数组 如果想非常顺利的写出这个模板,得记住下面这张图 ...

  • 树状数组

    复习一下树状数组 树状数组 一种用于处理单点修改和区间查询的数据结构。树状数组C的定义: C[x] = Sum ...

网友评论

      本文标题:2023-02-14 算法学习——树状数组/ST表

      本文链接:https://www.haomeiwen.com/subject/akjjkdtx.html