像他的祖先一样,Mansur 喜欢繁殖马匹。目前,他拥有哈萨克斯坦最大的马场。以前情况可不是这样,
按照时间的先后顺序将年份编号为
每年,只有年底的时候可以出售马匹。Mansur 用一个正整数
现在,Mansur 想知道如果在
Mansur 对记录下的
对于 Mansur 的问题,实际的答案可能是一个非常大的数字,你只要给出实际答案模
设
0 | 1 | 2 | |
---|---|---|---|
X | 2 | 1 | 3 |
Y | 3 | 4 | 1 |
上述情况下,Mansur 在 1 年末卖掉他的马可以获得最大收益。具体说明如下:
- 起初,Mansur 有 1 匹马。
- 0 年末,他有
匹马。 - 1 年末,他有
匹马。 - 1 年末,他卖掉 2 匹马,总收益是
。
然后,设
0 | 1 | 2 | |
---|---|---|---|
X | 2 | 1 | 3 |
Y | 3 | 2 | 1 |
这种情况下,一种获得最大收益的方案是 0 年末卖掉
- 起初,Mansur 有1匹马。
- 0 年末,他有
匹马。 - 0 年末,他卖掉 1 匹马,获益
,于是他只剩下 1 匹马。 - 1 年末,他有
匹马。 - 2 年末,他有
匹马。 - 2 年末,他卖掉 3 匹马,获益
,总收益是 。
任务
给定
- init(N, X, Y) — grader首先调用此函数恰好一次。
- N: 表示总共有
年。 - X: 长度为
的数组,对 , 表示 年的繁殖系数。 - Y: 长度为
的数组,对 , 表示 年末出售一匹马的价格。 - 注意:X、Y均为Mansur给定的初值(更新前的值)。
- init 函数结束后,数组 X 和 Y 仍然有效,你可以随意修改这两个数组的内容。
- 该函数返回初始状态下,Mansur 获得的最大收益模
后的值。
- N: 表示总共有
- updateX(pos, val)
- pos: 一个整数,范围是
。 - val:
更新后的值。 - 该函数返回这次更新后Mansur获得的最大收益模
的值。
- pos: 一个整数,范围是
- updateY(pos, val)
- pos: 一个整数,范围是
。 - val:
更新后的值。 - 该函数返回这次更新后Mansur获得的最大收益模
的值。
- pos: 一个整数,范围是
子任务
子任务 | 分值 | 限制 | ||
---|---|---|---|---|
1 | 17 | |||
2 | 17 | 无 | ||
3 | 20 | 调用 init 时的 | ||
4 | 23 | 无 | ||
5 | 23 | 无 |
实现细节
你只能提交一个源文件实现如上所述的 init, updateX和updateY 函数,并且遵循下面的命名和接口。你需要包含头文件 horses.h。
int init(int N, int X[], int Y[]);
int updateX(int pos, int val);
int updateY(int pos, int val);
评测方式
评测系统将读入如下格式的输入数据:
- 第
行: - 第
行: - 第
行: - 第
行: - 第
行:每行 个数字 type pos val(type = 1 表示 updateX,type = 2 表示 updateY)
评测系统将打印 init 的返回值,以及所有调用 updateX 和 updateY 后的返回值。
时间限制:
空间限制: