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

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

  • 相关阅读:
    要搜索内容
    .net core 过滤器
    C# => 写法
    js 数组的forEach 函数
    .net core 下载文件 其他格式
    win10 1903 更改文字大小
    fetch 写法
    C# 匿名对象 增加属性
    ping —— 虚拟机
    selenium验证车贷计算器算法
  • 原文地址:https://www.cnblogs.com/Achenchen/p/7479495.html
Copyright © 2011-2022 走看看