• 洛谷 : P3374 【模板】树状数组 1 P3368 【模板】树状数组 2


    ********************************************************************************

    属于模板题了,一个单点修改区间询问,一个区间修改单点询问

    /*单点修改的*/ 
    
    #include<cstdio>
    #include<algorithm>
    #define maxn 500001
    using namespace std;
    int tree[maxn];
    int lowbit(int x)
    {
        return x&-x;
    }
    int n,m;
    void add(int w,int x)
    {
        while(w<=n)
        {
            tree[w]+=x;
            w+=lowbit(w);
        }
    }
    int modify(int x)
    {
        int ans=0;
        while(x>0)
        {
            ans+=tree[x];
            x-=lowbit(x);
        }
        return ans;
    }
    int read()
    {
        int now=0;
        int f=1;
        char c=getchar();
        while(c>'9'||c<'0')
        {
            if(c=='-')f=-1;
            c=getchar();
        }
        while(c>='0'&&c<='9')
        {
            now*=10;
            now+=c-'0';
            c=getchar();
        }
        return now*f;
    }
    
    int main()
    {
        n=read();
        m=read();
        for(int i=1;i<=n;i++)
        {
            add(i,read());
        }
        for(int i=1;i<=m;i++)
        {
            int pan=read();
            int op=read();
            int od=read();
            if(pan==1)
            {
                add(op,od);
            }
            else
            {
                printf("%d
    ",modify(od)-modify(op-1));
            }
        }
        return 0;
    }

    *****************************************************************

    /*区间修改的*/
    
    #include<cstdio>
    #define maxn 500001
    using namespace std;
    int n,m;
    int tree[maxn];
    int note=0;
    int read()
    {
        int now=0;
        int f=1;
        char c=getchar();
        while(c>'9'||c<'0')
        {
            if(c=='-')f=-1;
            c=getchar();
        }
        while(c>='0'&&c<='9')
        {
            now*=10;
            now+=c-'0';
            c=getchar();
        }
        return now*f;
    }
    int lowbit(int x)
    {
        return x&-x;
    }
    void add(int wei,int x)
    {
        while(wei<=n)
        {
            tree[wei]+=x;
            wei+=lowbit(wei); 
        }
    }
    int query(int x)
    {
        int ans=0;
        while(x>0)
        {
            ans+=tree[x];
            x-=lowbit(x);
        }
        return ans;
    }
    int main()
    {
        n=read();
        m=read();
        int a,b,c;
        for(int i=1;i<=n;i++)
        {
            int aa=read();
            add(i,aa-note);
            note=aa;
        }
        for(int i=1;i<=m;i++)
        {
            
            if(read()==1)
            {
                a=read(),b=read(),c=read(),add(a,c),add(b+1,-c);
            }
            else
                printf("%d
    ",query(read()));
        }
        return 0;
     } 
  • 相关阅读:
    git 常用命令
    centos 7 mini 安装
    python打印杨辉三角
    python 求100内的素数/质数
    字符串与bytes
    format
    Python字符串格式化
    数据结构
    ARM工作模式
    C语言实现字符串逆序输出
  • 原文地址:https://www.cnblogs.com/luoyibujue/p/6890028.html
Copyright © 2020-2023  润新知