擦除序列
内存限制: 256 Mb时间限制: 1000 ms
题目描述
黑板上有 n 个数字,小爱每一次会擦除其中的某个数字,直至所有数字被擦完为止。
每一轮擦除一个数字后,小爱想知道剩下未被擦除的所有数字中,最大连续子段和的值。(在选择最大连续子段和时,不能包含任何被擦除的位置)
输入格式
输入共三行:
第一行:一个正整数n,表示原有数字个数
第二行:n个正整数a1,a2,...,an,分别表示原序列的值
第三行:n个正整数p1,p2,...,pn,表示每次被擦除数字的位置
输出格式
输出共n个数字,分别表示每一轮擦除后,剩下的最大子段和的值,以空格隔开
数据范围
- 对于 30% 的数据,满足 1≤n≤10^2。
- 对于 60% 的数据,满足 1≤n≤10^4
- 对于 100% 的数据,满足 1≤n≤10^5,1≤ai≤10^9。
样例数据
输入:
5
1 2 3 4 5
3 5 2 4 1
输出:
9 4 4 1 0
说明:
第1轮:删除第3个数字,得 1 2 X 4 5,此时最大子段和为4+5
第2轮:删除第5个数字,得 1 2 X 4 X,此时最大子段和为4
第3轮:删除第2个数字,得 1 X X 4 X,此时最大子段和为4
第4轮:删除第4个数字,得 1 X X X X,此时最大子段和为1
第5轮:删除第1个数字,得 X X X X X,此时最大子段和为0
解析:使用倒序,最后一个子段和为0,然后从最后擦除的数字开始添加,使用并查集维护子段和,依次找出最大子段和,
详见代码:
<