#include <cstdio>
#include <malloc.h>
int main(){
int n, m, op, x, l, r; // 这些变量按题目定义
long long *seq, *sum; //seq 为 n个数 序列数组指针,sum 为 操作3 求和结果数组指针
int i, j, k=0; // i、j为循环变量,k存储 操作3 的个数
scanf("%d %d", &n, &m);
seq = (long long *)malloc(sizeof(long long)*n); // 存储n个数的序列
sum = (long long *)malloc(sizeof(long long)*m); // 存储操作3求和的结果,最多m个
// 输入序列的 n 个元素
for (i = 0; i < n; i++)
scanf("%lld", &seq[i]);
// 对m个操作进行处理
for (i = 0; i < m; i++){
scanf("%d", &op); // 输入操作数
switch (op){ // 根据操作数的值(1、2、3)分别处理
case 1: // 相反数
for (j = 0; j < n; j++)seq[j] = -seq[j];break;
case 2: // 所有元素加上x
scanf("%d", &x);
for (j = 0; j < n; j++)seq[j] += x;
break;
case 3: // 求元素l~元素r的和
sum[k] = 0;
scanf("%d %d", &l, &r);
for (j = l-1; j < r; j++)sum[k] += seq[j];k++;
break;
default:break;
}
}
//printf("Output\n");
for (i = 0; i < k; i++){
printf("%lld\n", sum[i]);
}
// 释放内存
free(seq);
free(sum);
return 0;
}
#include <malloc.h>
int main(){
int n, m, op, x, l, r; // 这些变量按题目定义
long long *seq, *sum; //seq 为 n个数 序列数组指针,sum 为 操作3 求和结果数组指针
int i, j, k=0; // i、j为循环变量,k存储 操作3 的个数
scanf("%d %d", &n, &m);
seq = (long long *)malloc(sizeof(long long)*n); // 存储n个数的序列
sum = (long long *)malloc(sizeof(long long)*m); // 存储操作3求和的结果,最多m个
// 输入序列的 n 个元素
for (i = 0; i < n; i++)
scanf("%lld", &seq[i]);
// 对m个操作进行处理
for (i = 0; i < m; i++){
scanf("%d", &op); // 输入操作数
switch (op){ // 根据操作数的值(1、2、3)分别处理
case 1: // 相反数
for (j = 0; j < n; j++)seq[j] = -seq[j];break;
case 2: // 所有元素加上x
scanf("%d", &x);
for (j = 0; j < n; j++)seq[j] += x;
break;
case 3: // 求元素l~元素r的和
sum[k] = 0;
scanf("%d %d", &l, &r);
for (j = l-1; j < r; j++)sum[k] += seq[j];k++;
break;
default:break;
}
}
//printf("Output\n");
for (i = 0; i < k; i++){
printf("%lld\n", sum[i]);
}
// 释放内存
free(seq);
free(sum);
return 0;
}