#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int lowbit(int n){
return n-(n&(n-1));
}
/*
*原始数组的i位置增加v后, 更新c数组 n是边界
*/
void updata(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)){ //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++){
updata(9, i + 1, arr[i], c);
}
cout << getSum(c, 7) - getSum(c,4) << endl;
return 0;
}
数状数组【记忆性代码】
最新推荐文章于 2023-07-24 11:40:15 发布