问题描述
监督学习就是用正确答案已知的例子来训练神经网络,也就是用标记过的数据来验证数据模型的正确性。现在有这么的一个数据:某房地产商有 n 栋商品房,第 i 栋售价为 ai 元。房地产老板现让你写一个程序,在他的指令下,可以让 l 到 r 之间的售价都增加 x ,也可以计算 l 到 r 之间的售价总和并返回结果。指令如下:
1 l r
代表返回 l 到 r 之间的售价总和,称为1指令;
2 l r x
代表 l 到 r 之间的售价都增加 x ,称为2指令。
输入
第 1 行输入 n (1 <= n <= 105) 和 m (1 <= m <= 105),n 代表商品房的栋数, m 代表指令的个数(即 l 和 r 的组数)。
第 2 行输入 n 个数,分别代表 a1, a2, ... , an ,其中 1 <= ai <= 105。
第 3 ... m + 2 行输入 1 指令
或者 2 指令
,其中 1 <= l <= r <= n , 0 <= x <= 105。
输出
输出进行1指令操作后的结果。
输入范例
4 4 3 2 4 7 2 1 3 3 1 2 4 2 3 3 2 1 3 4
输出范例
19 16 Hint: 有4栋房子,售价分别为3、2、4、7,先进行2指令操作后,房价变为6、5、7、7,进行1指令操作就是对第2到第4栋房子售价进行相加,结果即为5+7+7=19,然后再 进行2指令操作,房价变为6、5、9、7,再进行1指令操作得到结果即16。
AC代码:
#include<stdio.h> int main() { int n; int m; int l; int r; int x; int a; int i; int sum; int house[100002]; while(scanf("%d %d",&n,&m)!=EOF){ for(i=1;i<=n;i++) scanf("%d",&house[i]); for(i=0;i<m;i++){ scanf("%d",&a); if(a==1){ sum=0; scanf("%d %d",&l,&r); while(l<=r){ sum=sum+house[l++]; } printf("%d\n",sum); } else if(a==2){ scanf("%d %d %d",&l,&r,&x); while(l<=r){ house[l]=house[l]+x; l++; } } } } return 0; }