/*
模板来自 http://www.cnblogs.com/kuangbin/archive/2012/08/23/2652007.html
*/
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
const int MAXN=100010;
int c[MAXN];
int n;//n代表有多少个位置
int lowbit(int x)
{
return x&(-x);
}
void add(int i,int val)
{
while(i<=n)
{
c[i]+=val;
i+=lowbit(i);
}
}
int sum(int i)
{
int s=0;
while(i>0)
{
s+=c[i];
i-=lowbit(i);
}
return s;
}
int main()
{
memset(c,0,sizeof(c));
/*
更新区间 ->求单点值
for(int i=0;i<n;i++)
{
scanf("%d%d",&a,&b);
[a,b]区间数字各加一
add(a,1);
add(b+1,-1);
}
sum[i]就代表i点的值
for(int i=1;i<n;i++)
printf("%d ",sum(i));
printf("%d\n",sum(n));
*/
/*
更新单点 ->求区间和||单点值
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
add(i,x);
}
[x,y] 区间和
sum(y)-sum(x-1)
*/
return 0;
}
(树状数组)模板
最新推荐文章于 2023-04-13 21:15:37 发布