1 条题解
- 
  0
#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
 - 标签
 - 递交数
 - 41
 - 已通过
 - 12
 - 上传者