现在有一个n个元素的数组a,而他要对a[L]-a[R]进行M次操作:
操作一:将a[L]-a[R]内的元素都加上P
操作二:将a[L]-a[R]内的元素都减去P
最后询问a[l]-a[r]内的元素之和?
n,m <= 1e6
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 6 using namespace std; 7 const int N = 1e6+10; 8 int n,m; 9 int a[N],b[N]; 10 int main() 11 { 12 while(scanf("%d%d",&n,&m)!=EOF) 13 { 14 for(int i = 1; i <= n; i++)scanf("%d",&a[i]); 15 int t,l,r,p; 16 17 while(m--) 18 { 19 scanf("%d%d%d%d",&t,&l,&r,&p); 20 if(t==1) 21 { 22 b[l]-=p; 23 b[r+1]+=p; 24 } 25 else 26 { 27 b[l]+=p; 28 b[r+1]-=p; 29 } 30 } 31 for(int i = 1; i <= n; i++) 32 b[i] += b[i-1]; 33 scanf("%d%d",&l,&r); 34 long long sum = 0; 35 for(int i = l; i <= r; i++) 36 sum+=a[i]+b[i]; 37 cout<<sum<<endl; 38 } 39 return 0; 40 }