linminmohan @ 2024-10-25 01:39:41
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define il inline
const int maxn=1e5+5;
int a[maxn], tr[maxn<<2], lazy[maxn<<2];
int n, m, t, b, c, d;
il int read()
{
int num=0, f=1;
char c=getchar();
while(c<'0'||c>'9') {if(c=='-') f=-1, c=getchar();}
while(c>='0'&&c<='9') {num=(num<<3)+(num<<1)+(c^48), c=getchar();}
return num*f;
}
il void build(int fa,int l,int r)
{
if(l==r)
{
tr[fa]=a[l];
return;
}
int mid=(l+r)>>1;
build(fa<<1,l,mid);
build(fa<<1|1,mid+1,r);
tr[fa]=tr[fa<<1]+tr[fa<<1|1];
}
il void push_down(int fa,int l,int r)
{
int mid=(l+r)>>1;
tr[fa<<1]+=lazy[fa]*(mid-l+1);
lazy[fa<<1]+=lazy[fa];
tr[fa<<1|1]+=lazy[fa]*(r-mid);
lazy[fa<<1|1]+=lazy[fa];
lazy[fa]=0;
}
int query(int ql,int qr,int fa,int l,int r)
{
int ans=0;
if(ql<=l&&qr>=r) return tr[fa];
int mid=(l+r)>>1;
push_down(fa,l,r);
if(ql<=mid) ans+=query(ql,qr,fa<<1,l,mid);
if(qr>mid) ans+=query(ql,qr,fa<<1|1,mid+1,r);
return ans;
}
il void chang(int ql,int qr,int fa,int l,int r,int sum)
{
if(ql<=l&&qr>=r)
{
lazy[fa]+=sum;
tr[fa]+=sum*(r-l+1);
return;
}
push_down(fa,l,r);
int mid=(l+r)>>1;
if(ql<=mid) chang(ql,qr,fa<<1,l,mid,sum);
if(qr>mid) chang(ql,qr,fa<<1|1,mid+1,r,sum);
tr[fa]=tr[fa<<1]+tr[fa<<1|1];
}
signed main()
{
n=read(), m=read();
for(int i=1;i<=n;i++) a[i]=read();
build(1,1,n);
while(m--)
{
t=read();
if(t==1)
{
b=read(), c=read(), d=read();
chang(b,c,1,1,n,d);
}
if(t==2)
{
b=read(), c=read();
printf("%lld\n",query(b,c,1,1,n));
}
}
return 0;
}
by summ1t @ 2024-10-25 06:41:40
@linminmohan 快读出锅了。
while(c<'0'||c>'9') {if(c=='-') f=-1, c=getchar();}
改成这个
while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}
f=-1后面是分号
by ZMQ_Ink6556 @ 2024-10-25 07:38:52
@summ1t 你确定你这个不会 CE?
by summ1t @ 2024-10-25 07:46:28
@ZMQ_Ink6556 不会啊
by ZMQ_Ink6556 @ 2024-10-25 08:12:13
@summ1t 中文分号