zoukankan      html  css  js  c++  java
  • 树状数组区间加法更新板子

    #include<bits/stdc++.h>
    #define read(x) scanf("%d",&x)
    using namespace std;
    const int N=1e6+7;
    struct BIT
    {
        int a[N];
        void modify(int pos,int v)
        {
            for(int i=pos;i<N;i+=i&-i)
                a[i]+=v;
        }
        int query(int pos)
        {
            int ans=0;
            for(int i=pos;i>0;i-=i&-i)
                ans+=a[i];
            return ans;
        }
    }bit0,bit1;
    void updata(int l,int r,int x)
    {
        bit0.modify(l,-x*(l-1));
        bit0.modify(r+1,x*r);
        bit1.modify(l,x);
        bit1.modify(r+1,-x);
    }
    int get_sum(int l,int r)
    {
        int ansl=bit1.query(l-1)*(l-1)+bit0.query(l-1);
        int ansr=bit1.query(r)*r+bit0.query(r);
        return ansr-ansl;
    }
    int n,q;
    int main()
    {
        read(n); read(q);
        for(int i=1;i<=n;i++)
        {
            int x; read(x);
            bit0.modify(i,x);
        }
        while(q--)
        {
            int op;
            read(op);
            if(op==1)
            {
                int l,r,x;
                read(l); read(r); read(x);
                updata(l,r,x);
            }
            else
            {
                int l,r;
                read(l); read(r);
                printf("%d
    ",get_sum(l,r));
            }
        }
        return 0;
    }
  • 相关阅读:
    单例模式
    说说抽象类接口
    闲说多态
    理解C#中的继承
    可变个数的形参的方法
    java 关键字
    数组的常见异常
    内存的基本结构 图片
    Java中的名称命名规范:
    死锁的例子 代码练习
  • 原文地址:https://www.cnblogs.com/CJLHY/p/8417343.html
Copyright © 2011-2022 走看看