数组(array)
【题目描述】
有一个长度为 n(n≤100) 的数组 a ,和长度为 m(m≤105) 的数组 b 。这两个数组都满足凸性条件。
什么是凸性条件?如果一个长度为 l 的数组 c 满足凸性条件,则
1. c2−c1>0
2. ci−ci−1<ci+1−ci(2<i<k−1)
有 q 次修改,每次修改给定正整数 type,k,d 。小 R 会构造一个长度为 k 等差数列(d,2d,3d,…,kd) 。
如果 type=1 ,则将数组 a 的后缀加上这个等差数列,即 an−k+1+=d,an−k+2+= 2d,…an+=kd ,数据保证此时 1≤k≤n 。
如果 type=2 ,则将数组 a 的后缀加上这个等差数列,即 bm−k+1+=d,bm−k+2+ =2d,…bm+=kd ,数据保证此时 1≤k≤m 。
每次操作结束之后,小 R 会构造一个 n×m 的矩阵 Zi,j=ai+bj 。你需要从这个矩阵的左上角 (1,1) 出发,每次向下或者向右走一格,走到右下角 (n,m) 。路径长度被定义为经过所有格子的数值和。你需要求出每次操作结束后的最短路径长度。
【输入格式】
从文件 array.in 中读入数据。
第一行三个正整数 $n, m, q\left(2 \leq n \leq 100,2 \leq m \leq 10^{5}, 1 \leq q \leq 10^{5}\right)$ ,分别表示数组a 的长度,数组 b 的长度和操作次数。
第二行 n 个整数 ai(1≤ai≤1012)
第三行 m 个整数 bi(1≤bi≤1012)
接下来 q 行,每行三个整数type,k,d(1≤d≤1000 。若type =1,1≤k≤n ;若type= 2,1≤k≤m ),表示一次操作。
【输出格式】
输出到文件 array.out 中。
输出 q 行,分别表示每次修改后的答案。
【样例1输入】
5 3 4
1 2 4 7 11
5 7 10
1 3 2
2 2 5
1 5 4
2 1 7
【样例1输出】
98
128
219
229
【样例 2】
见下发文件的 array/array2.in 与 array/array2.ans。
【样例 3】
见下发文件的 array/array3.in 与array/array3.ans。
【样例 4】
见下发文件的 array/array4.in 与array/array4.ans。
【数据范围与提示】
对于 100%的数据, $2 \leq n \leq 100,2 \leq m \leq 10^{5}, 1 \leq q \leq 10^{5}, 1 \leq a_{i}, b_{i} \leq 10^{12}$
| 数据编号 |
n |
m |
q |
特殊性质 |
| 1 ~ 3 |
= 2 |
≤100 |
|
| 4 ~ 7 |
≤105 |
≤105 |
| 8 ~ 11 |
≤100 |
≤1000 |
| 12 ~ 16 |
≤105 |
A |
| 17 ~ 22 |
B |
| 23 ~ 25 |
|
特殊性质 A :每次修改保证 type =1,k=n
特殊性质 B:每次修改保证 type= 1
附加文件