C. Destroying Array
time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

You are given an array consisting of n non-negative integers a1, a2, ..., an.

You are going to destroy integers in the array one by one. Thus, you are given the permutation of integers from 1to n defining the order elements of the array are destroyed.

After each element is destroyed you have to find out the segment of the array, such that it contains no destroyed elements and the sum of its elements is maximum possible. The sum of elements in the empty segment is considered to be 0.

Input

The first line of the input contains a single integer n (1 ≤ n ≤ 100 000) — the length of the array.

The second line contains n integers a1, a2, ..., an (0 ≤ ai ≤ 109).

The third line contains a permutation of integers from 1 to n — the order used to destroy elements.

Output

Print n lines. The i-th line should contain a single integer — the maximum possible sum of elements on the segment containing no destroyed elements, after first i operations are performed.

Examples
input
4
1 3 2 5
3 4 1 2
output
5
4
3
0
input
5
1 2 3 4 5
4 2 3 5 1
output
6
5
5
1
0
input
8
5 5 4 4 6 6 5 5
5 2 8 7 1 3 4 6
output
18
16
11
8
8
6
6
0
Note

Consider the first sample:

  1. Third element is destroyed. Array is now 1 3  *  5. Segment with maximum sum 5 consists of one integer 5.
  2. Fourth element is destroyed. Array is now 1 3  *   * . Segment with maximum sum 4 consists of two integers1 3.
  3. First element is destroyed. Array is now  *  3  *   * . Segment with maximum sum 3 consists of one integer 3.
  4. Last element is destroyed. At this moment there are no valid nonempty segments left in this array, so the answer is equal to 0.

题意:依次给你n个正数,然后给你n个操作,每次都将其中一个数字划去,然后问你整个数组中连续的一段的的最大的和是多少。

并查集:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <iostream>
#include <cmath>
#include <map>
#include <bitset>
#include <stack>
#include <queue>
#include <vector>
#include <bitset>
#include <set> #define MM(a,b) memset(a,b,sizeof(a));
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define CT continue
#define SC scanf
const int N=1e5+10;
ll a[N],ans[N];
int op[N],use[N],f[N]; int findr(int u)
{
if(f[u]!=u)
f[u]=findr(f[u]);
return f[u];
} int main()
{
int n;
while(~SC("%d",&n))
{
for(int i=1;i<=n;i++)
{
SC("%lld",&a[i]);
f[i]=i;
}
for(int i=1;i<=n;i++) SC("%d",&op[i]);
MM(use,0);MM(ans,0);
for(int i=n-1;i>=1;i--)
{
int k=op[i+1];
use[k]=1;
if(use[k-1])
{
int par=findr(k-1);
a[k]+=a[par];
f[par]=k;
}
if(use[k+1])
{
int par=findr(k+1);
a[k]+=a[par];
f[par]=k;
}
ans[i]=max(a[k],ans[i+1]);
}
for(int i=1;i<=n;i++) printf("%lld\n",ans[i]);
}
return 0;
}

  倒序并查集,合并。

最新文章

  1. 组件化h5活动模板的实现
  2. Ngnix下安装python2.7
  3. XMPP框架下微信项目总结(7)聊天通信处理-发送,接受数据
  4. JavaScript中的eval()函数
  5. RPC 135端口
  6. 谈谈 Repository、IUnitOfWork 和 IDbContext 的实践
  7. Js弹出层,弹出框代码
  8. [GIF] The Phase Property in GIF Loop Coder
  9. 一个js排序
  10. Yii - 验证和授权(Authentication and Authorization)
  11. 【设计模式 - 1】之工厂模式(Factory)
  12. 解决ASP.NET中ReportView与IE11的兼容性问题
  13. Tomcat:Can&#39;t load IA 32-bit .dll on a AMD 64-bit platform问题的解决
  14. Java编程之字符集问题研究
  15. javascript(五)验证
  16. HDU5058
  17. Struts2基础学习(五)&mdash;拦截器
  18. MyEclipse2014web工程项目直接复制不能访问报错处理方案
  19. 《用Java写一个通用的服务器程序》02 监听器
  20. 【Swift 3.0】iOS 国际化切换语言

热门文章

  1. Android试题
  2. JAVA对存储过程的调用方法(本文源于网络)
  3. mysql5.7 密码字段名更改
  4. Python 序列操作符与函数(字符串)
  5. IDEA的第一个java程序
  6. HTML中由于DIV(块元素)浮动,导致的父元素高度塌陷问题的解决方案
  7. 一 ArrayList 及其源码解析
  8. 【坑】Java中遍历递归删除List元素
  9. IDEA 社区版集成TOMCAT
  10. Django如何重设Admin密码(转)