1 条题解
-
0赵青海 (huhe) LV 7 SU @ 2022-7-28 10:51:00
#include<cstdio> const int N=1500005; long long a[N]; long long s[N]; long long sum[N]; long long n,m; inline long long read() { long long x=0,flag=1; char ch=getchar(); while(ch>'9'||ch<'0') { if(ch=='-')flag=-1; ch=getchar(); } while(ch>='0'&&ch<='9') { x=x*10+(ch-'0'); ch=getchar(); } return flag*x; } inline long long lowbit(long long x) { return x&(-x); } inline void add(long long x,long long k) { long long r=x; while(x<=n) { s[x]+=k; sum[x]+=r*k; x+=lowbit(x); } } inline long long calc(long long x) { long long ans=0; long long r=x; while(x) { ans+=(r+1)*s[x]-sum[x]; x-=lowbit(x); } return ans; } int main() { n=read();m=read(); for(int i=1;i<=n;i++) { a[i]=read(); add(i,a[i]-a[i-1]); //差分 } for(int i=1;i<=m;i++) { int order=read(); if(order==1) { long long x=read(),y=read(),k=read(); add(x,k); add(y+1,-k); //差分 } else if(order==2) { long long x=read(),y=read(); printf("%lld\n",calc(y)-calc(x-1)); } } }
- 1
信息
- ID
- 2553
- 时间
- 1500ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- 递交数
- 39
- 已通过
- 12
- 上传者