问题描述
小明准备来次穿越撒哈拉沙漠壮举,他知道穿越沙漠是件冒险的事情,所以他准备了一辆有x个油箱的车来次沙漠之旅。有x个油箱,从前到后放成一排,编号为1-x。
出发前小明对油箱进行了y次操作,其中有3种操作方式:
1.修改一个油箱的油量;
2.求连续一段油箱的油量和;
3.求连续一段油箱的油量最大值。
对于每个2、3操作输出对应的结果。
输入
输入的第一行为2个整数x,y。
接着一行x个整数表示x个油箱的开始油量。
接着y行,每行3个整数c,a,b,c表示操作方式,c=1时表示修改油箱a的油量为b,c=2时表示求区间[a,b]内油箱油量和,c=3时表示求区间[a,b]内的油箱最大的油量值。
输出
有若干行,行数等于c=2或c=3的操作总数。每行输出对应的每个c=2或c=3的操作结果。
输入范例
4 3
1 2 3 4
2 1 3
1 4 3
3 1 4
输出范例
6
3
#include<stdio.h> #define MAX 100000 int main() { int x; int y; int c; int b; int a; int i; int j; int sum; int max; int box[MAX]; while(scanf("%d %d",&x,&y)!=EOF){ for(i=1;i<=x;i++){ scanf("%d",&box[i]); } for(i=0;i<y;i++){ sum=0; max=0; scanf("%d %d %d",&c,&a,&b); switch(c){ case 1:box[a]=b; break; case 2:while(a<=b){ sum=sum+box[a++]; } printf("%d\n",sum); break; case 3:while(a<=b){ if(box[a]>max){ max=box[a]; } a++; } printf("%d\n",max); break; default:; } } } return 0; }