首页 > 编程语言 > 详细

树状数组板子(维护前缀和)

时间:2021-08-24 13:50:57      阅读:27      评论:0      收藏:0      [点我收藏+]
#include<iostream>
 #include<cmath>
 #include<algorithm>
 #include<cstring>
 #include<queue>
using namespace std;
typedef long long ll;
const int NS=5e5+5;
int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int tree[NS];
int sum[NS];
int lowbit(int t)
{
    return t&(-t);
}
void update(int x,int y,int n)
{
    for(int i=x;i<=n;i+=lowbit(i))
        tree[i]+=y;
}
int query (int z)
{
    long long sum=0;
    for(int i=z;i>=1;i-=lowbit(i))
        sum+=tree[i];
    return sum;
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {cin>>sum[i];}
    while(m--)
    {
        int a,x,y,z;
        cin>>a;
        if(a==1)
        {
            cin>>x>>y>>z;
            update(x,z,n);
            update(y+1,-z,n);
        }
        else
        {
            cin>>z;
            cout<<sum[z]+query(z)<<\n;
        }

    }
}

 

树状数组板子(维护前缀和)

原文:https://www.cnblogs.com/donkey9/p/15179845.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!