打一波数据结构的板子
PS:既然都有线段树了为什么还要树状数组?
因为它快啊~~跑不满log,可以有效防止卡常数
但是太复杂的操作就不要用它了(其实区间修改区间查询也能用,只是操作太高深了,不如直接线段树,差不了太多)
Code(兹磁单点修改区间查询))
#include<cstdio>
#include<iostream>
using namespace std;
int n,m;
int a[100005];
int sum[100005];
int lowbit(int x)
{
return x&(-x);
}
void add(int x,int y)
{
while(x<=n)
{
sum[x]+=y;
x+=lowbit(x);
}
}
int ask(int x)
{
int ans=0;
while(x>0)
{
ans+=sum[x];
x-=lowbit(x);
}
return ans;
}
int main()
{
scanf("%d%d",&n,&m);
int type,x,y;
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&type,&x,&y);
if(type==1)
{
a[x]+=y;
add(x,y);
}
if(type==2)
{
a[x]-=y;
add(x,-y);
}
if(type==3)
{
add(x,a[x]*y-a[x]);
a[x]*=y;
}
if(type==4)
{
printf("%d\n",ask(y)-ask(x-1));
}
}
return 0;
}