time limit per test1 second

memory limit per test256 megabytes

inputstandard input

outputstandard 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 1 to 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:

Third element is destroyed. Array is now 1 3  *  5. Segment with maximum sum 5 consists of one integer 5.

Fourth element is destroyed. Array is now 1 3  *   * . Segment with maximum sum 4 consists of two integers 1 3.

First element is destroyed. Array is now  *  3  *   * . Segment with maximum sum 3 consists of one integer 3.

Last element is destroyed. At this moment there are no valid nonempty segments left in this array, so the answer is equal to 0.

【题解】



线段树区间合并

每次删掉一个节点;

类似hotel那题,不同的是变成求连续的块的最大和。

可以在求连续块的基础上做一些加法运算求和。

每次操作完更新完之后输出mlx[1]即可(根节点代表整个区间);

#include <cstdio>
#include <algorithm> using namespace std; const int MAXN = 109000; int n, m;
int llianxusum[MAXN<<2], rlianxusum[MAXN<<2];
long long mllx[MAXN<<2], mrlx[MAXN<<2], mlx[MAXN<<2]; void build(int l, int r, int rt)
{
llianxusum[rt] = rlianxusum[rt] = r - l + 1;
if (l == r)
{
scanf("%I64d", &mlx[rt]);
mllx[rt] = mrlx[rt] = mlx[rt];
return;
}
int mid = (l + r) >> 1;
build(l, mid, rt << 1);
build(mid + 1, r, rt << 1 | 1);
mlx[rt] = mllx[rt] = mrlx[rt] = mlx[rt << 1] + mlx[rt << 1 | 1];
} void push_up(int rt, int len)
{
llianxusum[rt] = llianxusum[rt << 1];
mllx[rt] = mllx[rt << 1];
if (llianxusum[rt] == len - (len >> 1))
{
llianxusum[rt] += llianxusum[rt << 1 | 1];
mllx[rt] += mllx[rt << 1 | 1];//连续的序列和也可以递增
}
rlianxusum[rt] = rlianxusum[rt << 1 | 1];
mrlx[rt] = mrlx[rt << 1 | 1];
if (rlianxusum[rt] == len >> 1)
{
rlianxusum[rt] += rlianxusum[rt << 1];
mrlx[rt] += mrlx[rt << 1];//同理
}
mlx[rt] = max(mlx[rt << 1], mlx[rt << 1 | 1]);
mlx[rt] = max(mlx[rt], mrlx[rt << 1] + mllx[rt << 1 | 1]);
//整个区间的连续空格子数就没必要记录了。
//直接整个区间的最大和就好。
} void updata(int pos, int begin, int end, int rt)
{
if (begin == end)
{
llianxusum[rt] = rlianxusum[rt] = 0;
mlx[rt] = mllx[rt] = mrlx[rt] = 0;
return;
}
int m = (begin + end) >> 1;
if (pos <= m)
updata(pos, begin, m, rt << 1);
else
updata(pos, m + 1, end, rt << 1 | 1);
push_up(rt, end - begin + 1);
} int main()
{
//freopen("F:\\rush.txt", "r", stdin);
//freopen("F:\\rush_out.txt", "w", stdout);
scanf("%d", &n);
build(1, n, 1);
for (int i = 1; i <= n; i++)
{
int x;
scanf("%d", &x);
updata(x, 1, n, 1);
printf("%I64d\n", mlx[1]);
}
return 0;
}

【37.38%】【codeforces 722C】Destroying Array的更多相关文章

  1. 【Codeforces 722C】Destroying Array (数据结构、set)

    题意 输入一个含有 n(1≤n≤100000) 个非负整数的 a 数组和一个 1-n 的排列 p 数组,求每次删除 a[p[i]] 后,最大连续子段和(不能跨越被删除的)是多少? 分析 因为都是非负整 ...

  2. 【 BowWow and the Timetable CodeForces - 1204A 】【思维】

    题目链接 可以发现 十进制4 对应 二进制100 十进制16 对应 二进制10000 十进制64 对应 二进制1000000 可以发现每多两个零,4的次幂就增加1. 用string读入题目给定的二进制 ...

  3. 【35.37%】【codeforces 556C】Case of Matryoshkas

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  4. 【38.02%】【codeforces 625B】War of the Corporations

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  5. 【81.37%】【codeforces 734B】Anton and Digits

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  6. 【21.37%】【codeforces 579D】"Or" Game

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  7. 【Educational Codeforces Round 38 (Rated for Div. 2)】 Problem A-D 题解

    [比赛链接] 点击打开链接 [题解] Problem A Word Correction[字符串] 不用多说了吧,字符串的基本操作 Problem B  Run for your prize[贪心] ...

  8. 【codeforces 415D】Mashmokh and ACM(普通dp)

    [codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...

  9. 【搜索】【并查集】Codeforces 691D Swaps in Permutation

    题目链接: http://codeforces.com/problemset/problem/691/D 题目大意: 给一个1到N的排列,M个操作(1<=N,M<=106),每个操作可以交 ...

随机推荐

  1. Summary Day32

    1 . 文件管理 1.1 标C文件处理和UC文件处理函数的比較: 标C文件处理函数比UC的文件处理函数速度快.由于标C内部独立输入输出缓冲区, 会积累一定数量之后再写入文件,因此读写效率比較高 使用t ...

  2. Android基础新手教程——3.8 Gestures(手势)

    Android基础新手教程--3.8 Gesture(手势) 标签(空格分隔): Android基础新手教程 本节引言: 周六不歇息,刚剪完了个大平头回来.继续码字~ 好的,本节给大家带来点的是第三章 ...

  3. ContentValues的使用

    什么是 ContentValues类? ContentValues类和 Hashtable比较类似,它也是负责存储一些名值对,但是它存储的名值对当中的名是一个String类型,而值都是基本类型. 插入 ...

  4. SQL2012的新分页方法

    SELECT BusinessEntityID , FirstName , LastName FROM Person.Person ORDER BY BusinessEntityID OFFSET ( ...

  5. .NET Entity Framework入门操作

    Entity Framework是微软借鉴ORM思想开发自己的一个ORM框架. ORM就是将数据库表与实体对象(相当于三层中的Model类)相互映射的一种思想. 最大的优点就是非常方便的跨数据库平台. ...

  6. cc1.exe -fno-stack-protector

    # github.com/mattn/go-sqlite3 cc1.exe: error: unrecognized command line option "-fno-stack-prot ...

  7. CSS min-height不能解决垂直外边距合并问题

    垂直外边距合并有一种情况是嵌套元素的垂直外边距合并,当父级元素没有设定外边距时,在顶部或者底部边缘的子元素的垂直外边距就会和父级的合并,导致父级也有了“隐形”的垂直外边距. 当父级元素的min-hei ...

  8. BZOJ1014[JSOI2008]火星人prefix(splay维护hash)

    Description 火星人最近研究了一种操作:求一个字串两个后缀的公共前缀.比方说,有这样一个字符串:madamimadam,我们将这个字符串的各个字符予以标号:序号: 1 2 3 4 5 6 7 ...

  9. 洛谷——P1073 最优贸易 ([NOIP2009] )

    https://www.luogu.org/problem/show?pid=1073 题目描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个 城市之间最多 ...

  10. COGS——T 1786. 韩信点兵

    http://www.cogs.pro/cogs/problem/problem.php?pid=1786 ★★★   输入文件:HanXin.in   输出文件:HanXin.out   简单对比时 ...