【37.38%】【codeforces 722C】Destroying Array
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的更多相关文章
- 【Codeforces 722C】Destroying Array (数据结构、set)
题意 输入一个含有 n(1≤n≤100000) 个非负整数的 a 数组和一个 1-n 的排列 p 数组,求每次删除 a[p[i]] 后,最大连续子段和(不能跨越被删除的)是多少? 分析 因为都是非负整 ...
- 【 BowWow and the Timetable CodeForces - 1204A 】【思维】
题目链接 可以发现 十进制4 对应 二进制100 十进制16 对应 二进制10000 十进制64 对应 二进制1000000 可以发现每多两个零,4的次幂就增加1. 用string读入题目给定的二进制 ...
- 【35.37%】【codeforces 556C】Case of Matryoshkas
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- 【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 ...
- 【81.37%】【codeforces 734B】Anton and Digits
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- 【21.37%】【codeforces 579D】"Or" Game
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- 【Educational Codeforces Round 38 (Rated for Div. 2)】 Problem A-D 题解
[比赛链接] 点击打开链接 [题解] Problem A Word Correction[字符串] 不用多说了吧,字符串的基本操作 Problem B Run for your prize[贪心] ...
- 【codeforces 415D】Mashmokh and ACM(普通dp)
[codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...
- 【搜索】【并查集】Codeforces 691D Swaps in Permutation
题目链接: http://codeforces.com/problemset/problem/691/D 题目大意: 给一个1到N的排列,M个操作(1<=N,M<=106),每个操作可以交 ...
随机推荐
- [TypeScript] Model Alternatives with Discriminated Union Types in TypeScript
TypeScript’s discriminated union types (aka tagged union types) allow you to model a finite set of a ...
- [AngularFire] Resolve snapshotChanges doesn't emit value when data is empty
Updated to AngularFire2 v5.0. One important change is that you need to call .snapshotChanges() or .v ...
- Linux-清除rootpassword
1.Linux进入单用户模式,通常选择内核按e 最后加入single,按b进入单用户. 2.清除/etc/shadow中root这一行第一个:符号和第二个:符号之间内容. 3.正常启动,passwd ...
- 数据库中解析XML
简介:OPENXML方法使用一例实现导入功能 DECLARE @strProjGUID AS VARCHAR(50) DECLARE @strProjCode AS VARCHAR(50) DEC ...
- Exploring Micro-frameworks: Spring Boot--转载
原文地址:http://www.infoq.com/articles/microframeworks1-spring-boot Spring Boot is a brand new framework ...
- CISP/CISA 每日一题 二
CISA 观察和测试用户操作程序 1.职责分离:确保没人具有执行多于一个下列处理过程的能力:启动.授权.验证或分发 2.输入授权:可以通过在输入文件上的书面授权或唯一口令的使用来获得证据 3.平衡:验 ...
- 【例题 8-4 UVA - 11134】Fabled Rooks
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 显然把问题分解成两个子问题. x轴和y轴分别做. 即n个点要求第i个点在[li,ri]范围内.(ri<=n) 问是否可行. 按 ...
- Hadoop学习总结(2)——Hadoop入门详解
1.Hadoop介绍 Hadoop是Apache软件基金会旗下的一个开源分布式计算平台,为用户提供了一个系统底层细节透明的分布式架构,通过Hadoop,可以将大量的廉价机器的计算资源组织起来,解决单机 ...
- 上传excel数据到数据库中
上传excel表格数据到数据库 导入固定路径下的excel数据到数据库 <form id="disposeFlightDataForm" action="../up ...
- 洛谷 P2677 超级书架 2
P2677 超级书架 2 题目描述 Farmer John最近为奶牛们的图书馆添置了一个巨大的书架,尽管它是如此的大,但它还是几乎瞬间就被各种各样的书塞满了.现在,只有书架的顶上还留有一点空间. 所有 ...