zoukankan      html  css  js  c++  java
  • 树状数组 区间修改+区间查询

    其实直到不久前都几乎不会用树状数组,请教了PPZ大佬之后终于懂了一点点。

    然后小蒟蒻现在才知道了树状数组区间修改+区间查询的方法QAQ

    传送门

    Codevs 线段树练习3

    //Twenty
    #include<cstdio>
    #include<cstdlib>
    #include<iostream>
    #include<algorithm>
    #include<cmath>
    #include<cstring>
    #include<queue>
    #include<vector>
    typedef long long LL;
    const int maxn=200000+299;
    using namespace std;
    LL n,m,vv,pre,now,sum[maxn],ad[maxn];
    int op,x,y;
    void add(int x,LL v) {
        for(int i=x;i<=n;i+=(i&(-i)))
            sum[i]+=v,ad[i]+=v*x;
    }
    LL qry(int x) {
        LL res=0;
        for(int i=x;i;i-=(i&(-i)))
            res+=sum[i]*(x+1)-ad[i];
        return res;
    }
    int main()
    {
        scanf("%lld",&n);
        for(int i=1;i<=n;i++) {
            scanf("%lld",&now);
            add(i,now-pre);
            pre=now;
        }
        scanf("%d",&m);
        for(int i=1;i<=m;i++) {
            scanf("%d%d%d",&op,&x,&y);
            if(op==1) {
                scanf("%lld",&vv);
                add(x,vv);
                add(y+1,-vv);
            }
            else printf("%lld
    ",qry(y)-qry(x-1));
        }
        return 0;
    }
    线段树练习3

     所以树状数组可以当线段树又可以当平衡树,好写又常数小真的草鸡好用呀。

  • 相关阅读:
    BZOJ 3189. [Coci2011]Slika
    BZOJ3188. [Coci 2011]Upit
    P4304 [TJOI2013]攻击装置
    P3966 [TJOI2013]单词
    P3964 [TJOI2013]松鼠聚会
    BZOJ 3157: 国王奇遇记
    设计模式--策略模式
    SSM整合步骤
    Mybatis笔记二
    Java调用WebService之Axis实现
  • 原文地址:https://www.cnblogs.com/Achenchen/p/7479495.html
Copyright © 2011-2022 走看看