求助大佬解题
查看原帖
求助大佬解题
1275048
StruggleLonelyTears楼主2024/10/3 09:47

现在有一个长度为 nn 的数列 a_1, a_2, ..., a_na 接下来进行 m 次操作,每次操作可能是以下两种中的一种: 1 p k:将 a_i的值在自己的基础上加上 k。 2 p:将 a_i的值在自己的基础上乘以 2。 3 l r:计算区间 [l,r][l,r] 中每个数字之和。 请你编写一个程序,输出每次操作 3 的结果。

输入格式 第一行包含两个整数 nn 和 mm,表示数列长度和操作次数。

第二行包含 nn 个整数,表示初始的数列。

接下来 mm 行,每行包含一个操作指令。操作指令格式和题目描述一致。

输出格式 对于每个操作 3,输出一个结果,每个结果占一行。 输入输出样例 输入 #1复制 5 5 2 3 1 8 4 3 2 4 1 3 1 3 2 4 2 3 3 2 4 输出 #1复制 12 13 15 样例解释 最开始,序列是 2,3,1,8,42,3,1,8,4。

第一次操作是输出第 2\sim 42∼4 数字的和,也就是输出 3+1+8=123+1+8=12。

第二次操作是把第 33 个数字加上 11,序列变为 2,3,2,8,42,3,2,8,4。

第三次操作是输出第 2\sim 42∼4 的数字和,也就是输出 3+2+8=133+2+8=13。

第四次操作是把第 33 个数字乘以 22,序列变为 2,3,4,8,42,3,4,8,4。

第五次操作是输出第 2\sim 42∼4 的数字和,也就是输出 3+4+8=153+4+8=15。

#include<bits/stdc++.h>
using namespace std;
int a[100001],b[100001][3],c[100001],d[100001];
int main(){
	int m,n;
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>c[j];
			if(c[j]==2){
				cin>>b[j][1];
				a[b[j][1]]=a[b[j][1]]*2;
			}
			if(c[j]==1){
				cin>>b[j][1]>>b[j][2];
				a[b[j][1]]==a[b[j][1]]+b[j][2];
			}
			if(c[j]==3){
				cin>>b[j][1]>>b[j][2];
				d[j]+=a[j][1];
				cout<<d[j];
			}
		}
	}
}
2024/10/3 09:47
加载中...