修改中好像只加了(l−1)∗k,然后减去了r∗k,就没了,可是正常来讲,不是每个数各自的位置-1再与k相乘吗?
void in(int x,int val)
{
for(int i=x;i<=n;i+=(i&(-i))) tr1[i]+=val,tr2[i]+=(x-1)*val;
}
int main()
{
for(int i=1;i<=q;i++)
{
int opt=read(),l=read(),r=read(),x;
if(opt==1) x=read(),in(l,x),in(r+1,-x);
}
}
我很好奇。