六个字的游戏
题号:NC282077
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

Cindy最近沉迷某种六个字的游戏。

这个游戏里有一个场景是选择房间,每个房间会有不同的事件。最后一个房间会面对游戏Boss。

Cindy设计了一个比原版游戏简单一些的场景:

现在有一行n个房间。每个房间里有a_i份奖励。一些房间是普通房间,获取该房间的奖励对其他房间无任何影响。另一些房间是特殊房间,获取该房间内的奖励会导致编号满足i - a_i \le x \le i + a_ix号房间内的奖励清零。当然,对于这两类房间,你都可以不获取奖励,此时对其他房间无任何影响。

你的任务是计算最多能在按顺序从1 \sim n走完这n个房间后可以获取的最多奖励数量。

输入描述:

第一行输入一个整数 n(1 \leq n \leq 5 \times 10^5) 表示一共有几个房间。

第二行输入 n 个整数 a_i(1 \leq a_i \leq 10^9) 表示每个房间内的奖励数量。

第三行输入 n 个整数 b_i(0 \leq b_i \leq 1) 表示每个房间属性, 1 表示普通房间, 0 表示特殊房间。

输出描述:

输出一个整数表示答案。
示例1

输入

复制
3
1 2 3
0 1 0

输出

复制
5