您的位置:首页 > 运维架构

POJ3468(树状数组区间维护)

2015-11-22 15:03 495 查看
模板题

#include"cstdio"
#include"cstring"
#define lowbit(i) i&(-i)
using namespace std;
const int MAXN=100005;
typedef long long LL;
LL bit0[MAXN];
LL bit1[MAXN];
void add(LL* b,int i,int c)
{
while(i<=MAXN)
{
b[i]+=c;
i+=lowbit(i);
}
}
LL sum(LL* b,int i)
{
LL s=0;
while(i>0)
{
s+=b[i];
i-=lowbit(i);
}
return s;
}
void solve(int n,int q)
{
for(int i=1;i<=n;i++)
{
int a;
scanf("%d",&a);
add(bit0,i,a);
}
for(int j=0;j<q;j++)
{
scanf("%*c");
char op;
scanf("%c",&op);
if(op=='C')
{
int l,r,x;
scanf("%d %d %d",&l,&r,&x);
add(bit0,l,-x*(l-1));
add(bit1,l,x);
add(bit0,r+1,x*r);
add(bit1,r+1,-x);
}
else
{
LL res=0;
int l,r;
scanf("%d %d",&l,&r);
res+=sum(bit0,r)+sum(bit1,r)*r;
res-=sum(bit0,l-1)+sum(bit1,l-1)*(l-1);
printf("%lld\n",res);
}
}
}
int main()
{
int n,q;
while(scanf("%d %d",&n,&q)!=EOF)
{
memset(bit0,0,sizeof(bit0));
memset(bit1,0,sizeof(bit1));
solve(n,q);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: