没搞大明白
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
#define maxn 32010
int sum[maxn];
int level[maxn];
int lowbit(int k){
return k & (-k);
}
void add(int i, int v){
while(i <= maxn){
sum[i] += v;
i += lowbit(i);
}
}
int getSum(int i){
int s = 0;
while(i){
s += sum[i];
i -= lowbit(i);
}
return s;
}
int main(){
int n, i, x, y;
while(scanf("%d", &n) != EOF){
memset(level, 0, sizeof(level));
memset(sum, 0, sizeof(sum));
for(i=0; i<n; i++){
scanf("%d %d", &x, &y);
level[getSum(x+1)]++;
add((x+1), 1);
}
for(i=0; i<n; i++){
printf("%d\n", level[i]);
}
}
return 0;
}
参考:http://shizhixinghuo.diandian.com/post/2012-09-12/40039901557
本文介绍了一种使用树状数组实现区间求和的方法,并通过一个具体的C++代码示例展示了如何更新元素值及获取指定位置之前元素的累积和。这种方法广泛应用于处理涉及大量更新与查询操作的问题。
224

被折叠的 条评论
为什么被折叠?



