@[optmize_2](/space/show?uid=224978)
感觉你的q函数应该写挂了
by Mystery_Sky @ 2019-09-11 19:39:39
```c++
if(mid>nr) ret+=q(nl,nr,mid+1,rr,r(id));
```
符号反了吧
by Mystery_Sky @ 2019-09-11 19:40:47
~~@[optmize_2](/space/show?uid=224978) 是不是你的build写错了~~
by pzc2004 @ 2019-09-11 19:40:53
第一,数组开1000找死
第二,不开longlong找死
第三,
```cpp
if(l==r){t[id]=a[ll];return ;}
```
您的l和r是啥
by ix35 @ 2019-09-11 19:41:19
@[Mystery_Sky](/space/show?uid=115383) ++
by optimize_2 @ 2019-09-11 19:41:37
@[optmize_2](/space/show?uid=224978) 三年OI一场空,不开四倍见祖宗
by pzc2004 @ 2019-09-11 19:42:08
@[ix35_](/space/show?uid=113546) 我这个就是调试一下
by optimize_2 @ 2019-09-11 19:42:33
@[optmize_2](/space/show?uid=224978) ~~催更~~树状数组
```cpp
#include<cstdio>
#include<algorithm>
using namespace std;
int n,a[100001];
long long C[100001],C2[100001];
inline int lowbit(int v){
return v&(-v);
}
void modify(int ID,int v){
for(int i=ID;i<=n;i+=lowbit(i)) C[i]+=v,C2[i]+=ID*v;
}
long long getans(int v){
long long ans=0,ans2=0;
for(int i=v;i;i-=lowbit(i)) ans+=(v+1)*C[i],ans2+=C2[i];
return ans-ans2;
}
int main(){
int m,cmd,x,y,k;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=n;i++) modify(i,a[i]-a[i-1]);
while(m--){
scanf("%d",&cmd);
if(cmd^2) scanf("%d%d%d",&x,&y,&k),modify(x,k),modify(y+1,-k);
else scanf("%d%d",&x,&y),printf("%lld\n",getans(y)-getans(x-1));
}
return 0;
}
```
by qbu666666 @ 2019-09-11 20:01:37
~~催更《犇犇报》~~
by 紫陰花 @ 2019-09-11 20:02:33
@[qbu666666](/space/show?uid=157598) 我是来学线段树的qwq
by optimize_2 @ 2019-09-11 20:03:07