摧毁阵法
(a.cpp 1s/512MB)
题目描述
给你一个由n个非负整数组成的数列 (a_1, a_2, ..., a_n)
你将要一个一个摧毁这个数列中的数。并且,现在给你一个由 1 到 n 组成的序列来告诉你每个数被摧毁的时间顺序。
每当一个元素被摧毁时,你需要找到这个当前数列中的未被摧毁的数组成的和最大的连续子序列,另外,如果当前剩余的序列是空的的话,最大和就是0。
输入格式
第一行包含一个整数n (1 <= n <= 100000) , 代表数列的长度。
第二行包含n个整数 (a_1, a_2, ..., a_n) ((0 leq a_i leq 10^9))。
第三行包含一个由1到n的整数组成的序列,代表数被摧毁的顺序。
输出格式
输出有n行,第i行包含一个整数 —— 在第i个操作已经执行完之后,数列中连续的最大和
样例
输入样例
4
1 3 2 5
3 4 1 2
输出样例
5
4
3
0
样例解释
第三个元素被破坏了。数组现在是13*5段,最大和5由一个整数5组成。
第四个元素被摧毁。阵法现在是13**。最大和为4的段由两个整数1 3组成。
第一个元素被破坏。数组现在是*3**。最大和为3的段包含一个整数3。
最后一个元素被销毁。此时此数组中没有剩余的有效非空段,因此答案等于0。
数据范围与提示
见上文