码迷,mamicode.com
首页 > 编程语言 > 详细

C++树状数组

时间:2020-07-08 19:53:22      阅读:47      评论:0      收藏:0      [点我收藏+]

标签:set   for   amp   alt   end   树状   img   ret   space   

 

#include <iostream>
#include <cstring>

using namespace std;

int lowbit(int n) {
    return n - (n & (n - 1));
}
/**
 *
原始数组的i位置增加v后,更新c数组
 */
void update(int n, int i, int v, int c[]) {
    for (int k = i; k <= n; k += lowbit(k)) {
        c[k] += v;
    }
}

int getSum(int c[], int i) {
    int sum = 0;
    for (int k = i; k >= 1; k -= lowbit(k)) {
        sum += c[k];
    }
    return sum;
}

int main() {
    int arr[] = {1, 2, 3, 4, 5, 6, 7, 8};
    int c[9];
    memset(c, 0, sizeof(c));
    for (int i = 0; i < 8; ++i) {
        update(9, i + 1, arr[i], c);
    }
    cout << getSum(c, 5) << endl;
    cout << getSum(c, 6) << endl;
    cout << getSum(c, 7) - getSum(c, 4) << endl;

    return 0;
}

技术图片

C++树状数组

标签:set   for   amp   alt   end   树状   img   ret   space   

原文地址:https://www.cnblogs.com/HDawn/p/13268521.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!