首页 > 编程语言 > 详细

树状数组

时间:2021-04-02 22:07:48      阅读:31      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

 

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int total[500005];
int n,m;
int lowbit(int x)
{
    return(~x+1)&x;
}
void add(int i,int x)
{
    while(i<=n)
    {
        total[i] += x;
        i+=lowbit(i);
    }
}
int sum(int x)
{
    int ans=0;
    while(x!=0)
    {
        ans+=total[x];
        x-=lowbit(x);
    }
    return ans;
}
int main(void)
{
    cin >> n >> m;
    for(int i = 1;i<=n;i++)
    {
        int x; cin >> x;
        add(i,x);
    }
    
    while(m--)
    {
        int a; cin >> a;
        if(a == 1)
        {
            int x,y; cin >> x >> y;
            add(x,y);
        }
        if(a == 2)
        {
            int x,y; cin >> x >> y;
            int ans = sum(y) - sum(x-1);
            cout << ans << endl;
        }
    }
    return 0;
}

 

树状数组

原文:https://www.cnblogs.com/loliconsk/p/14612109.html

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