您的位置:首页 > 其它

树状数组模版

2014-04-30 22:23 113 查看
C1 = A1

C2 = A1 + A2

C3 = A3

C4 = A1 + A2 + A3 + A4

C5 = A5

C6 = A5 + A6

C7 = A7

C8 = A1 + A2 + A3 + A4 + A5 + A6 + A7 + A8

...

C16 = A1 + A2 + A3 + A4 + A5 + A6 + A7 + A8 + A9 + A10 + A11 + A12 + A13 + A14 + A15 + A16

Cn = A(n – 2^k + 1) + ... + An

int c[66666],n;
int lowbit(int x)
{
return x&(-x);
}
void add(int x,int y)
{
for(int j=x;j<=n;j+=lowbit(j))
c[j]+=y;
}
void sub(int x,int y)
{
for(int j=x;j<=n;j+=lowbit(j))
c[j]-=y;
}
int sum(int x)
{
int sum=0;
for(int j=x;j>0;j-=lowbit(j))
sum+=c[j];
return sum;
}
void qurry(int x,int y)
{
printf("%d\n",sum(y)-sum(x-1));
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: