zoukankan      html  css  js  c++  java
  • 加强树状数组luogu3368

    暴力树状数组30分,这该怎么办;

    知识点回顾

    差分数组中

    开头结尾改变了值之后

    求他的前缀,发现区间内所有数都改变

    然后我们做差分树状数组


    #include<cstdio>
    using namespace std;
    int n,m;
    int c[501010];
    int lowbit(int x){
        return x&-x; 
    }
    void update(int i,int x){
        while(i <= n){
            c[i] += x;
            i += lowbit(i);    
        }
    }
    int sum(int x)
    {
        int sum = 0;
        while(x){
            sum += c[x];
            x -= lowbit(x);    
        } 
        return sum;
    }
    int main()
    {
        scanf("%d%d",& n,& m);
        int x, y, z, k; 
        for(int i = 1;i <= n;++ i){
            scanf("%d",& x); 
            update(i,x),update(i+1,-x); 
        }
        while(m-- ){
            scanf("%d",& z);
            if(z == 2){
                scanf("%d",& x);
                 printf("%d
    ",sum(x));
            }else{
                   scanf("%d%d%d",& x,& y,& k);
                   update(x, k);update(y+1, -k);
            }
        }
        return 0;
    }
  • 相关阅读:
    Celery
    高并发架构
    websocket
    git分支管理
    auto_ptr与shared_ptr
    UDP信号驱动IO
    TCP带外数据
    UDP广播
    获取mac地址
    char数组初始化
  • 原文地址:https://www.cnblogs.com/dsrdsr/p/8987095.html
Copyright © 2011-2022 走看看