zoukankan      html  css  js  c++  java
  • 单点修改区间求和线段树模板

    
    #include <stdio.h>
    #include <cstring>
    #include <cstdlib>
    #include <cmath>
    #include <iostream>
    #include <algorithm>
    #define maxn 500010
    
    using namespace std;
    
    struct point
    {
        int l,r,val;
    }tr[maxn*4];
    
    int m,n;
    int a[maxn];
    
    void buildtree(int x,int l,int r)
    {
        tr[x].l=l;
        tr[x].r=r;
        if(l==r)
        {
            tr[x].val=a[l];
            return;
        }
        int lch=x*2,rch=x*2+1;
        int mid=(l+r)/2;
        buildtree(lch, l, mid);
        buildtree(rch, mid+1, r);
        tr[x].val=tr[x*2].val+tr[x*2+1].val;
    }
    
    void modify(int x,int pos,int val)
    {
        if(tr[x].l==tr[x].r)
        {
            tr[x].val+=val;
            return;
        }
        int mid=(tr[x].l+tr[x].r)/2;
        if(pos<=mid)
            modify(x*2, pos, val);
        else
            modify(x*2+1, pos, val);
        tr[x].val=tr[x*2].val+tr[x*2+1].val;
    }
    
    int query(int x,int l,int r)
    {
        if(l<=tr[x].l && tr[x].r<=r)
            return tr[x].val;
        int mid=(tr[x].l+tr[x].r)/2;
        int ans=0;
        if(l<=mid)
            ans+=query(x*2, l, r);
        if(r>mid)
            ans+=query(x*2+1, l, r);
        return ans;
    }
    
    int main()
    {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
        buildtree(1, 1, n);
        for(int i=1;i<=m;i++)
        {
            int op;
            scanf("%d",&op);
            if(op==1)
            {
                int x,k;
                scanf("%d%d",&x,&k);
                modify(1, x, k);
            }
            else
            {
                int x,y;
                scanf("%d%d",&x,&y);
                printf("%d
    ",query(1, x, y));
            }
        }
    }
    
  • 相关阅读:
    上经 -- 乾【卦一】乾为天(三)
    上经 -- 乾【卦一】乾为天(一)
    8. Shell 文件包含
    7. Shell 函数
    6. Shell 流程控制
    5. test命令
    4. printf 命令
    3. Shell 基本运算符
    2. Shell 传递参数
    shell介绍
  • 原文地址:https://www.cnblogs.com/ShineEternal/p/10834219.html
Copyright © 2011-2022 走看看