zoukankan      html  css  js  c++  java
  • 树状数组改点求段

    #include<stdio.h>
    int a[20],n;
    int lowbit(int x)
    {
        return x&(-x);
    }
    
    void add(int x,int c)
    {
        int i;
        for(i=x; i<=n; i+=lowbit(i))a[i]+=c;
    }
    int sum(int x)
    {
        int s=0,i;
        for(i=x; i; i-=lowbit(i))s+=a[i];
        return s;
    }
    int main()
    {
        scanf("%d",&n);
        add(10,2);//把a[10]加2
    printf("%d",sum(n));//输入10则a[1]到a[10]的和为2(a初始全为0)
    
        return 0;
    }

    上面是最基本的改点求段
    add 使a[x]加c

    sum 求 1...x 的和
    ●注意 x 不能是 0

    例2

    #include<stdio.h>
    int a[50],n;
    int lowbit(int x)
    {
        return x&(-x);
    }
    
    void add(int x,int c)
    {
        int i;
        for(i=x; i<=n; i+=lowbit(i))a[i]+=c;
    }
    int sum(int x)
    {
        int s=0,i;
        for(i=x; i; i-=lowbit(i))s+=a[i];
        return s;
    }
    int main()
    {
    int i;
          scanf("%d",&n);
    for(i=1;i<=20;i++)add(i,i);//给a[i]赋值i
    printf("%d",sum(n));//求a[1]到a[n]的和
        return 0;
    }
    随便写写。一点学习心得。。。--如果本文章没有注明转载则为原创文章,可以随意复制发表,但请注明出处与作者
  • 相关阅读:
    list tuple dict 方法
    字典的方法
    看不懂的缩写
    canvas画图
    DOM2和DOM3
    表单脚本
    事件
    DOM扩展
    DOM
    BOM
  • 原文地址:https://www.cnblogs.com/ganhang-acm/p/3859310.html
Copyright © 2011-2022 走看看