nahidaa @ 2024-10-03 12:06:35
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll nq,n,m,x,y,val,ka_len,a[100005],ans;
struct kuai{
ll l,r,val,lazy;
}ka[500];
int main()
{
cin>>n>>m;
for(int i=1;i<=n;++i){
cin>>a[i];
}
nq=sqrt(n);
ka_len=nq;
for(int i=1;i<=ka_len;++i){
ka[i].l=(i-1)*nq+1,ka[i].r=i*nq;
for(int j=ka[i].l;j<=ka[i].r;++j){
ka[i].val+=a[j];
}
}
if(ka[nq].r<n){
ka[++ka_len].l=(ka_len-1)*nq+1,ka[ka_len].r=n;
for(int j=ka[ka_len].l;j<=ka[ka_len].r;++j){
ka[ka_len].val+=a[j];
}
}
for(int i=1;i<=m;++i){
cin>>x;
if(x==1){
cin>>x>>y>>val;
for(int j=1;j<=ka_len;++j){
if(ka[j].l>=x&&ka[j].r<=y){
ka[j].lazy+=val;
}else if(ka[j].l<=x||ka[j].r>=y){
int L=max(ka[j].l,x),R=min(ka[j].r,y);
for(int k=L;k<=R;++k){
a[k]+=val;
ka[j].val+=val;
}
}
}
}else{
cin>>x>>y;
ans=0;
for(int j=1;j<=ka_len;++j){
if(ka[j].l>=x&&ka[j].r<=y){
ans+=ka[j].val+(ka[j].r-ka[j].l+1)*ka[j].lazy;
}else if(ka[j].l<=x||ka[j].r>=y){
int L=max(ka[j].l,x),R=min(ka[j].r,y);
for(int k=L;k<=R;++k){
ans+=a[k];
ans+=ka[j].lazy;
}
}
}
cout<<ans<<"\n";
}
}
}
by dongzirui0817 @ 2024-10-03 19:46:13
@nahidaa
1.你可以去洛谷IDE测
2.是我的本地错
3.是 I and you 的 Code 不是一个东西
by nahidaa @ 2024-10-03 21:46:54
@dongzirui0817 我本地错了,我用的C++版本有点低,谢谢大佬!!!