zoukankan      html  css  js  c++  java
  • 二叉索引树 区间信息的维护与查询 Anti

    二叉索引树,俗称树状数组,也叫Fenwick树。

    例:

      给定一个n个元素的数组A1, A2, A3, ……, An, 设计一个数据结构,支持以下两种操作。

        1、Add  x  y       :让Ax增加y

        2、Query  L  R    :计算AL + AL+1 + …… + AR

    #include <stdio.h>
    #include <string.h>
    
    int n, a[110], c[110];
    
    int lowbit(int x)
    {
        return x & -x;
    }
    
    int sum(int x)
    {
        int ans = 0;
        while(x > 0)
        {
            ans += c[x];
            x -= lowbit(x);
        }
        return ans;
    }
    
    void Query(int L, int R)
    {
        printf("%d\n", sum(R)-sum(L-1));
    }
    
    void Add(int x, int y)
    {
        while(x <= n)
        {
            c[x] += y;
            x += lowbit(x);
        }
    }
    
    int main()
    {
        scanf("%d", &n);
        memset(c, 0, (n+1)*sizeof(int));
        for(int i = 1; i <= n; i++)
            scanf("%d", &a[i]);
        for(int i = 1; i <= n; i++)
            for(int j = i-lowbit(i)+1; j <= i; j++)
                c[i] += a[j];
        int x, y;
        char cmd[10];
        while(scanf("%s", cmd) != EOF)
        {
            if(cmd[0] == 'Q')
            {
                scanf("%d %d", &x, &y);
                Query(x, y);
            }
            else if(cmd[0] == 'A')
            {
                scanf("%d %d", &x, &y);
                Add(x, y);
            }
        }
        return 0;
    }
  • 相关阅读:
    面向对象
    通信编程
    系统编程和单片机编程思维的改变
    代码是设计出来的
    好的代码设计
    通信传输协议数据包的独门绝技使用-----------共用体的使用
    $|^|z||/a|/l
    eubacteria|endosymbiosis|基因转移
    ctDNA|endosymbiosis
    mtDNA|ctDNA|cpDNA|
  • 原文地址:https://www.cnblogs.com/wolfred7464/p/3104609.html
Copyright © 2011-2022 走看看