2017西安交大ACM小学期 毁灭序列[倒跑并查集]

毁灭序列

发布时间: 2017年7月4日 20:58   最后更新: 2017年7月6日 22:23   时间限制: 1000ms   内存限制: 512M

给出一个n(1n2×105)个非负整数a1,a2,...,an的序列,你要按一定顺序毁灭序列的中的数,在每次毁灭一个数后,输出不包括已毁灭元素的子段的最大字段和(空子段的字段和视为0)

第一行输入一个整数n为序列的长度

第二行输入n个数a1,a2,...,an(0ai109)

第三行输入一个1到n的整数的排列,为毁灭元素的顺序

输出n行,每一行包含一个整数,意义见题目描述

 复制
4
1 3 2 5
3 4 1 2
5
4
3
0
 复制
5
1 2 3 4 5
4 2 3 5 1
6
5
5
1
0
 复制
8
5 5 4 4 6 6 5 5
5 2 8 7 1 3 4 6
18
16
11
8
8
6
6
0

第一个样例中:

第一次毁灭第三个元素,数组为`1 3 * 5`,最大字段和为5

第二次毁灭第四个元素,数组为`1 3 * *`,最大子段和为4

第三次毁灭第一个元素,数组为`* 3 * *`,最大子段和为3

第四次毁灭第二个元素,最大子段和为0

题解:

这道题目正向处理并不好处理,而反着想却非常简单。

这里用到的知识是倒跑并查集,我们把操作逆向处理,删除一个元素的逆操作就是增加一个元素,当这个元素增加到这个序列里面的时候,只有可能影响到它两边的字段,因此,我们将这个元素加入序列时候,把两边字段并入到刚加入的元素中,形成一个新的字段,这个字段的和就是两侧字段和加该元素的值。并用这个新的字段和和max_ans做更新,然后得到此次操作的答案。

字段做并操作就是并查集的合并。

这样的话,把得到的答案逆序输出就可以了。


代码:


#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
const int MAX = 2e5+8;
int n;
int a[MAX];
int stack[MAX];
long long out_stk[MAX];
int pt_sp;
int sp = 0;
int parent[MAX];
long long vis[MAX];
int find(int x){while(x != parent[x]) x = parent[x];return x; 
}
void init(){for(int i = 0;i < MAX;i++){parent[i] = i;} 
}
int main(){while(~scanf("%d",&n)){memset(vis,0,sizeof(vis));init();sp = 0;for(int i = 0;i < n;i++){scanf("%d",&a[i]);}for(int i = 0;i < n;i++){scanf("%d",&stack[sp++]);} pt_sp = 0;long long max_ans = 0;while(sp--){out_stk[pt_sp++] = max_ans;int pos = stack[sp]-1;vis[pos] += a[pos];if(pos > 0 && vis[pos-1]){int p = find(pos-1);vis[pos] += vis[p];parent[p] = pos;}if(pos < n-1 && vis[pos+1]){int p = find(pos+1);vis[pos] += vis[p];parent[p] = pos;}max_ans = max(max_ans,vis[pos]);}while(pt_sp--){printf("%lld\n",out_stk[pt_sp]);}}return 0;
}





本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/321671.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P4036-[JSOI2008]火星人【Splay,二分,hash】

正题 题目链接:https://www.luogu.com.cn/problem/P4036 题目大意 一个字符串要求支持 插入一个字符修改一个字符询问两个后缀的最长公共前缀。 解题思路 如果不考虑修改我们可以用二分hashhashhash解决该问题&#xff0c;但是涉及到修改和插入我们考虑用SplaySplaySplay维…

36、JAVA_WEB开发基础之监听器

是什么 顾名思义就是监听器就是监听器&#xff0c;在开发中指的是一种机制&#xff0c;通过这种机制可以对应用中组件的创建、销毁、更改等动作进行监视&#xff0c;根据具体监听信息作出相应的处理 工作原理 就是预先给组件添加一个事件&#xff0c;当这个组件被操作&#…

2017西安交大ACM小学期 神器插座 KMP匹配

神奇插座 发布时间: 2017年7月3日 11:27 最后更新: 2017年7月5日 13:46 时间限制: 500ms 内存限制: 128M 描述 AA所在的国家有一项神奇的发明&#xff1a;插座。这里的插座不仅有两孔、三孔&#xff0c;而是有多种形态&#xff0c;下面用不同的小写字母表示不同的插座。插…

jzoj3626-[LNOI2014]LCA【树链剖分,线段树】

正题 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id3626 题目大意 一棵树&#xff0c;每次给出(l,r,z)(l,r,z)(l,r,z)询问∑ilrdepLCA(i,z)\sum_{il}^rdep_{LCA(i,z)}il∑r​depLCA(i,z)​ 解题思路 若询问LCA(x,y)LCA(x,y)LCA(x,y)的深度有一种方法&#xf…

37、JAVA_WEB开发基础之上传功能

是什么 上传指的是将客户端的文件保存到服务器的磁盘中 基本实现原理 读取客户端的文件信息&#xff0c;将文件信息以流的形式发送到服务器&#xff0c;然后服务器将流中的信息保存到本地&#xff0c;以实现文件的上传 实例 注意&#xff1a;提交的表单类型一定是 enctype…

2017西安交大ACM小学期 文本查找[AC自动机]

文本查找 发布时间: 2017年7月5日 00:10 最后更新: 2017年7月5日 13:47 时间限制: 1500ms 内存限制: 128M 描述 给定m种两两不同的关键词&#xff0c;并给定一段文本&#xff0c;问这段文本中有几种关键词出现&#xff08;一种关键词出现多次只算一次&#xff09;。 输入…

P4296-[AHOI2007]密码箱【数论】

正题 题目链接:https://www.luogu.com.cn/problem/P4296 题目大意 一个数字nnn&#xff0c;求有多少个x<nx<nx<n使得x2%n1x^2\%n1x2%n1。 解题思路 x2kn1x^2kn1x2kn1 x2−1knx^2-1knx2−1kn (x−1)(x1)%n0(x-1)(x1)\%n0(x−1)(x1)%n0 ⇒\Rightarrow⇒ x(x2)%n0(x2&l…

38、JAVA_WEB开发基础之下载功能

是什么 下载指的是将服务器端的文件保存到客户端的磁盘中 基本实现原理 根据对应的要下载的文件在服务器端找到对应的文件&#xff0c;然后获取到文件流对象&#xff0c;将流对象发送到客户端&#xff0c;然后客户端通过对返回结果中文件流的解析&#xff0c;将流对象转换成…

2017西安交大ACM小学期 有趣异或[Trie树]

有趣异或 发布时间: 2017年7月4日 23:59 最后更新: 2017年7月5日 14:56 时间限制: 1500ms 内存限制: 512M 描述 给定n个非负整数&#xff0c;保证这些数两两不相同。现给定x&#xff0c;请从中选2个不同的数a,b&#xff0c;使得a^b^x最大。 输入 包含多组测试数据。 每组…

P5675-[GZOI2017]取石子游戏【博弈论,dp】

正题 题目链接:https://www.luogu.com.cn/problem/P5675 题目大意 nnn堆石子&#xff0c;第iii堆有aia_iai​个。指定一些石子堆使得先手必胜并指定一个先手第一个取的位置使得先手必败&#xff0c;求有多少方案数。 解题思路 根据NIMNIMNIM游戏&#xff0c;只要石子数异或和…

39、JAVA_WEB开发基础之ajax和json

ajax是什么 首先要知道ajax并不是一种新的技术&#xff0c;而是几种技术的强强联合&#xff0c;全称是Asynchronous Javascript and xml&#xff0c;其精髓在于异步加载资源&#xff0c;因此可以实现局部加载效果&#xff08;因为可以异步加载&#xff0c;所以不需要依靠整张页…

(不误正业)鼓励做题的时间陷阱

前言 在家闲的无聊想着没人陪我做题就写了一个可以(或许)鼓励做题的东西 正题 关于时间陷阱 时间陷阱是种游戏类型&#xff0c;玩家开始时有一个倒计时&#xff0c;没完成一个任务会增加倒计时&#xff0c;时间到了那么任务就输了。 这里编写的时间陷阱任务重要度(完成后加的…

2017西安交大ACM小学期 美妙音乐[差分KMP匹配]

美妙音乐 发布时间: 2017年7月3日 13:14 最后更新: 2017年7月5日 13:47 时间限制: 500ms 内存限制: 128M 描述 一段音乐是由若干个音符组成的&#xff0c;音乐中的某段音符称为旋律。给定一首音乐&#xff0c;问某个旋律出现了多少次。注意&#xff1a; &#xff08;1&am…

1、数据库简介

数据库是什么 数据库是一种用来存储数据的仓库&#xff0c;是一种高效存储和处理数据的介质&#xff08;载体&#xff09;。我们通常口中所说的数据库指的是数据库管理系统&#xff08;DBMS&#xff09;&#xff0c;是一种用于方便管理数据库的软件。 数据库的分类 根据存储…

P2387-[NOI2014]魔法森林【LCT】

前言 话说LCTLCTLCT的SplaySplaySplay和平时写的SplaySplaySplay差别好大&#xff0c;调了我半天 正题 题目链接:[https://www.luogu.com.cn/problem/P2387 题目大意 nnn个点mmm条边有a,ba,ba,b两个值&#xff0c;求一条路径从1−>n1->n1−>n使得路径上最大的aaa加上…

2017西安交大ACM小学期 敏感词汇[AC自动机]

敏感词汇 发布时间: 2017年7月5日 00:23 最后更新: 2017年7月6日 14:40 时间限制: 1500ms 内存限制: 128M 描述 我们知道&#xff0c;在进行聊天时&#xff0c;有些词汇是敏感词汇&#xff0c;含有敏感词汇的内容是不允许被发送的。现在给定m个敏感词汇&#xff0c;并给定…

2、安装和连接mysql

安装mysql 1、官网下载mysql 下载网址&#xff1a;https://www.mysql.com/ 2、解压并配置mysql 解压下载的&#xff08;前提下载的zip版本的mysql&#xff09;mysql安装包&#xff0c;放到指定磁盘 配置环境变量&#xff1a;将mysql下的bin目录的全路径名配置到环境变量的p…

51nod-诺德街【数学期望】

正题 题目链接:http://www.51nod.com/Contest/Problem.html#contestProblemId305 题目大意 nnn个商铺&#xff0c;第iii个商铺有pip_ipi​的概率营业&#xff0c;一个人从111走到nnn再走回来一直重复&#xff0c;如果走到没有人营业的商铺那么就结束。 求期望走多少个商铺后停…

ACM一类方程问题的求解[最短路建模] bzoj2118

在ACM生涯里已经预见两回判断这种方程是否有解、有几个解的问题了。 例如&#xff1a; 1 给定非负整数a,b,c,n&#xff0c;请判断axbyczn是否存在(x,y,z)均为非负整数的解 题目链接&#xff1a;http://oj.xjtuacm.com/contest/14/problem/124/ 再例如&#xff1a; 2 现有…

3、数据库中的字符集和校对集

字符集 字符集指的就是存储数据到硬盘时用到的编码方式&#xff0c;mysql中操作字符集的基本sql如下&#xff1a; show character set; -- 查看服务器支持哪些字符集 show variables like ‘character_set%’; -- 查看服务器对外处理的默认字符集 set character_set_clien…