全连
全连
题目描述
E.Space 喜欢打音游。
但是他技术不好,总是拿不到全连(Full Combo)。
现在他面前有一份乐谱,乐谱的其中一段有 nnn 个连续的单键音符。
相邻两个音符的到来时间均相等,我们可以认为第 iii 个音符会在第 iii 个时刻到来。
点击一个音符,E.Space 需要一段准备时间来进行移动手指之类的操作。由于音符的位置和周围情况不同,点击每个音符的准备时间也不同。
在一个音符的准备时间内,E.Space 没法做到去点击其它音符,但是不同音符的准备时间范围可以互相重叠。形式化地,令第 iii 个音符的准备时间为 tit_iti 个单位时间,那么如果 E.Space 选择去点击第 iii 个音符,那么他就没法点击所有到来时刻在 (i−ti ,i+tii + t_ii+ti)中的音符。
为了获得更高的分数,E.Space 还计算了每个音符的性价比。一个音符的性价比等于点击这个音符得到的分数除以 E.Space 点击它所需要的准备时间。
E.Space 就不指望全连了,他只是想让你帮他计算一下他最多可以得到多少分数。
输入格式
从文件 fc.in
中读入数据。
第一行一个正整数 n 。
第二行 n 个正整数,第i 个正整数表示 ti 。
第三行 n 个正整数,第i 个正整数表示第 iii 个音符的性价比 aia_iai 。
输出格式
输出到文件 fc.out
中。
一行一个正整数,表示 E.Space 可能达到的最高分数。
样例
样例 1 输入
5
2 3 2 1 2
3 1 2 9 4
样例 1 输出
18
样例 1 解释
E.Space 可以选择点击第 1,3,51,3,51,3,5 个音符,分数为 2×3+2×2+2×4=18 。
数据范围与提示
保证 ti≤nt_i \le nti≤n ,ai≤109a_i \le 10^9ai≤109
测试点编号 | n≤n \len≤ |
---|---|
1 | 5 |
2 | 10 |
3 | 15 |
4 | 20 |
5 | 1000 |
6 | 2000 |
7 | 5000 |
8 | 10000 |
9 | 30000 |
10 | 50000 |
11 | 100000 |
12 | 200000 |
13 | 500000 |
14 | 800000 |
15 | 1000000 |
16 | 1000000 |
17 | 100000 |
18 | 100000 |
19 | 1000000 |
20 | 1000000 |
solution
dp
令f[i]表示前i个音符,第i个音符必点的最大收益。
那么f[i]=f[j]+a[i]*t[i] (i-t[i]>=j&&j+t[j]<=i)
有一个比较裸的想法是第1个限制主席树,对于每一个1~j维护一稞线段树,维护合法位置,最大值。
可惜MLE。
考虑一个j如果在i时能贡献,以后也能。
那么我们可以在一个j能贡献时在把它加入。
用一个vector存某个点应该在哪里加入,剩下的树状数组维护。