【模板】树状数组

int n;
const int maxn = 100010;
int a[maxn];
int sum1[maxn];
int sum2[maxn];

inline int lowbit(int x)
{
    return x & (-x);
}

inline void updata(int i,int k)
{
    int x = i;
    while (i <= n)
    {
        sum1[i] += k;
        sum2[i] += k * (x - 1);
        i += lowbit(i);
    }
}

inline int get_sum(int i)
{
    int res = 0;
    int x = i;
    while (i > 0)
    {
        res += x * sum1[i] - sum2[i];
        i -= lowbit(i);
    }
    return res;
}

int main()
{
    //输入n
    for (int i = 1; i <= n; i++)
    {
        //输入a[i]
        updata(i,a[i] - a[i - 1]);
    }
    int l,r,t;
    //输入l,t
    //[l,r]区间加t
    updata(l,t);
    updata(r + 1,t);
    //输入l,r
    int sum;
    //询问[l,r]区间和
    sum = get_sum(r) - get_sum(l - 1);
}

相关文章

自1998年我国取消了福利分房的政策后,房地产市场迅速开展蓬...
文章目录获取数据查看数据结构获取数据下载数据可以直接通过...
网上商城系统MySql数据库设计
26个来源的气象数据获取代码
在进入21世纪以来,中国电信业告别了20世纪最后阶段的高速发...