老司机破阵

Time Limit: 4500/1500MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)

Problem Description

老司机的女朋友被坏人抓起来了,护女票心切的老司机心急火燎的赶到坏人藏匿女票的地点想要救出她,但是老司机的神通广大坏人们早有耳闻,等老司机赶到时已经有一个法阵摆在他的面前阻挡着他。

法阵是一条直线上的n个法力元件构成的,老司机每次可以将一个法力元件击碎,法阵的能量就是所有 连贯的元件能量和的最大值 。

老司机非常的自信,他有一套自己的破除法阵的方案(虽然不见得是最佳)

老司机希望能实时的关注着法阵的能量,一旦能量允许,他就破阵而入,救出女票。

忙着破阵的老司机自然没有功夫去计算他每步操作之后法阵的能量,他只能将此重任交与在座的各位大侠,请大家助他一臂之力。

Input

第一行n (1 ≤ n ≤ 100,000),为法力元件数量

第二行有n个数,为每个法力元件所含有的能量ei(0 ≤ ei ≤ 1e9)

第三行有n个数,为老司机击破法力元件的顺序

Output

输出n行,为老司机每次击破法力元件后法阵的能量。

Sample Input

5

1 2 3 4 5

4 2 3 5 1

8

5 5 4 4 6 6 5 5

5 2 8 7 1 3 4 6

Sample Output

6

5

5

1

0

8

18

16

11

8

8

6

6

0


解题心得:

  1. 别被题意给唬住了,可以去看看并查集的倒用,题意是叫你去将一个集合拆开,看起来很恐怖,其实完全是不需要的,只要按照拆开的顺序逆着来合并就可以了,运用一个并查集的知识,但是有也有要注意的东西,就是使用倒过来合并的时候叫你输出最大的能量顺序一开始应该是0,最后的那个所有能量的和其实是不存在的不应该输出,自己处理一下就好了。

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+100;
int num1[maxn],num2[maxn];
int father[maxn];
long long sum[maxn];
long long ans[maxn];
long long Max = 0;
bool vis[maxn]; int find(int x)
{
if(father[x] == x)
return x;
else
return father[x] = find(father[x]);
} void merge(int a,int b)
{
int fa = find(a);
int fb = find(b);
if(fa != fb)
{
father[fb] = fa;
sum[fa] += sum[fb];//在集合合并的时候也要将他们的和加起来
}
} long long Find(int x)
{
vis[x] = true;
if(sum[x] > Max)
Max = sum[x];
if(vis[x+1])//如果它的上一个存在就合并
{
merge(x,x+1);
if(sum[find(x)] > Max)
Max = sum[find(x)];
}
if(vis[x-1])//下一个存在也合并
{
merge(x,x-1);
if(sum[find(x)] > Max)
Max = sum[find(x)];
}
return Max;//记录每次连接的最大值
} int main()
{
int n;
while(scanf("%d",&n) != EOF)
{
Max = 0;
memset(vis,0,sizeof(vis));
int t = 0;
for(int i=1; i<=n; i++)
{
scanf("%d",&num1[i]);
sum[i] = num1[i];
father[i] = i;
}
for(int i=1; i<=n; i++)
scanf("%d",&num2[i]);//记录拆除的顺序
ans[t++] = 0;//记录答案
for(int i=n; i>=1; i--)
{
long long now;
now = Find(num2[i]);
ans[t++] = now;
}
for(int i=t-2; i>=0; i--)
printf("%lld\n",ans[i]);
}
}

并查集:CDOJ1593-老司机破阵 (假的并查集拆除)的更多相关文章

  1. 并查集:CDOJ1594-老司机的奇幻漂流 (食物链)

    老司机的奇幻漂流 UESTC - 1594 Problem Description 老司机在救出了女票之后,就和她在全世界旅游,有一天,他们来到了一个神奇的小岛上. 这个小岛上有三种动物,他们互相克制 ...

  2. 老司机带你玩转面试(5):Redis 集群模式 Redis Cluster

    前文回顾 建议前面文章没看过的同学先看下前面的文章: 「老司机带你玩转面试(1):缓存中间件 Redis 基础知识以及数据持久化」 「老司机带你玩转面试(2):Redis 过期策略以及缓存雪崩.击穿. ...

  3. 老司机带你玩转面试(2):Redis 过期策略以及缓存雪崩、击穿、穿透

    前文回顾 建议前一篇文章没看过的同学先看下前面的文章: 「老司机带你玩转面试(1):缓存中间件 Redis 基础知识以及数据持久化」 过期策略 Redis 的过期策略都有哪些? 在聊这个问题之前,一定 ...

  4. 老司机的奇怪noip模拟T2-huangyueying

    2. 黄月英(huangyueying.cpp/c/pas )[问题描述]xpp 每天研究天文学研究哲学,对于人生又有一些我们完全无法理解的思考.在某天无聊学术之后, xpp 打开了 http://w ...

  5. 老司机实战Windows Server Docker:2 docker化现有iis应用的正确姿势

    前言 上一篇老司机实战Windows Server Docker:1 初体验之各种填坑介绍了安装docker服务过程中的一些小坑.这一篇,我们来填一些稍大一些的坑:如何docker化一个现有的iis应 ...

  6. 老司机带你开飞机 一: mssql on linux 安装指导

    通常在本机开发环境中需要搭建所有的服务,还要修改本地的hosts,实在是不胜其烦.如今有了docker,完全不用污染本地环境,且看老司机带你搭建一个asp.net core的开发环境集群.愿你走出虚拟 ...

  7. 年薪30W的软件测试“老司机”工作经验

    这几天,新入职的小MM提议“老司机”们把自己这些年的软件测试工作经验跟大家分享一下,让新同学学习学习,利用空闲时间我整理了一些,可能不全,勉强看看,这也算是对自己这些年的工作总结. 测试阶段划分 1. ...

  8. bugku秋名山老司机+写博客的第一天

    bugku之秋名山老司机 题目连接:http://123.206.87.240:8002/qiumingshan/ 一点进去是这样的 请在两秒内计算这个式子...怎么可能算的出来 查看源码,无果.. ...

  9. 面试官问我,为什么老司机建议MySQL列属性尽量用 NOT NULL ?

    本文阅读时间大约6分钟. 其实写这篇文章,也是来自一个知识星球读者的提问,他在二面的过程中被问到了,由于他简历中写道有 MySQL 调优经验,但这个问题没有回答好,二面被刷了. 其实我们刚学习 C 语 ...

随机推荐

  1. CM5.7.2 yum离线安装笔记

    一.建立yum本地服务源(yum支持http和ftp两种协议,这里使用http协议)  1.启动httpd服务   启动命令:service httpd start   关闭命令:service ht ...

  2. springMVC数据校验与单文件上传

    spring表单标签:    <fr:from/> 渲染表单元素    <fr:input/>输入框组件    <fr:password/>密码框组件标签    & ...

  3. EF5 通用数据层 增删改查操作,泛型类

    using System; using System.Collections.Generic; using System.Data.Entity.Infrastructure; using Syste ...

  4. 原创 html动态表格

    <table id="opttb"> <asp:Repeater ID="tempOptions" runat="server&qu ...

  5. 对flex-grow和flex-shrink的深入理解

    flex弹性布局,如果子元素宽度之和大于或者小于父元素宽度,空间就会存在剩余和不够,flex默认不换行,除非设置flex-wrap,那么这种情况下,有两个重要的属性,flex-grow和flex-sh ...

  6. Memcache笔记02-telnet操作memcached

    telnet操作Memcached 登录到telnet连接到memcached服务: telnet 127.0.0.1 11211 memcached的基本命令: //当telnet登录成功可以看到一 ...

  7. Exchange 用户邮箱导入/导出

    在第2部分中,我将向您介绍如何使用Exchange Server中提供的新cmdlet导入/导出数据,以及如何查看导入和导出的信息统计信息这样做. 走起! 将数据从PST文件导入到邮箱 现在是时候尝试 ...

  8. java uuid第一次性能

    在java中产生uuid的方式是使用java.util.UUID. UUID.randomUUID().toString(); 我在测试redis性能时,使用uuid产生测试数据,发现多线程测试red ...

  9. 数据库之游标过程-- 基于MySQL

    实例如下: DROP PROCEDURE IF EXISTS pr_change_station_user_acct_his; -- 如果存在存储过程,即删除存储过程 create procedure ...

  10. UIView Border color

    // // UIView+Borders.h // // Created by Aaron Ng on 12/28/13. // Copyright (c) 2013 Delve. All right ...