有一个由n个非负整数组成的数列 a1,a2,a3…an。现在将要一个一个摧毁这个数列中的数。同时,有一个由 1 到 n 组成的序列来告诉你每个数被摧毁的时间顺序。
每当一个元素被摧毁时,你需要找到这个当前数列中的未被摧毁的数组成的和最大的连续子序列,另外,如果当前剩余的序列是空的的话,最大和就是0。
第一个样例:
1.第三个数被删除了,现在的数列是 1 3 O 5 ,答案为5由一个数5组成。
2.第四个数被删除了,现在的数列是 1 3 O O ,答案为4由两个数1和3组成。
3.第一个数被删除了,现在的数列是 O 3 O O ,答案为3由一个数3组成。
4.第二个数被删除了,现在的数列是O O O O,答案为0没有数字组成。
第一行包含一个整数 n (0 \leq N \leq10^5) , 代表数列的长度。
第二行包含n个整数,第i个数为a_i。0 \leq a[i] \leq10^9。
第三行包含一个由1到n的整数组成的序列,代表数被摧毁的顺序。
输出有n行,第i行包含一个整数表示在第i个操作已经执行完之后,数列中连续的最大和。
4 1 3 2 5 3 4 1 2
5 4 3 0
20\%数据,N \leq 20
40\%数据,N \leq 200
60\%数据,N \leq 2000
100\%数据,N \leq 10^5
时间限制 | 1 秒 |
内存限制 | 128 MB |