【CodeForces - 722C】Destroying Array(并查集,时光倒流)
题干:
给定一个有n个数的序列a1,a2, ..., an
你每次可以将序列中一个数删去,剩下的数会被分割为一段一段连续的数列
给定一个删除数的顺序,问在每次删除之后,剩下的连续的数列中,数列和的最大值为多少
Input
第一行输入仅有一个正整数n(1<=n<=100000)
第二行包括n个整数a1,a2, ..., an(0<=ai<=1,000,000,000)
第三行为n个正整数的一个全排列,为删除元素的顺序。
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 5consists of one integer 5.
- Fourth element is destroyed. Array is now 1 3 * * . Segment with maximum sum 4consists of two integers 1 3.
- First element is destroyed. Array is now * 3 * * . Segment with maximum sum 3consists 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.
解题报告:
倒着考虑操作,并查集维护最大值即可。具体就是如果当前操作位置idx,如果左边已经操作过,那就可以想做合并,同理可以向右合并,注意a[i]可以为0,所以不能用sum数组来判断是否出现过,而应该新开一个数组ok来记录。
AC代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define FF first
#define SS second
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
typedef pair<int,int> PII;
const int MAX = 2e5 + 5;
int n,op[MAX],f[MAX];
ll a[MAX],sum[MAX],ans[MAX],mx;
int getf(int v) {return f[v] == v ? v : f[v] = getf(f[v]);
}
void merge(int u,int v) {int t1 = getf(u),t2 = getf(v);if(t1 == t2) return;f[t2] = t1;sum[t1] += sum[t2];mx = max(mx,sum[t1]);
}
bool ok[MAX];
int main()
{cin>>n;for(int i = 1; i<=n; i++) scanf("%lld",a+i),f[i] = i;for(int i = 1; i<=n; i++) scanf("%d",op+i);for(int i = n; i>=1; i--) {sum[op[i]] = a[op[i]];ok[op[i]]=1;mx = max(mx,sum[op[i]]);if(ok[op[i]+1] != 0) merge(op[i],op[i]+1);if(ok[op[i]-1] != 0) merge(op[i],op[i]-1);ans[i]=mx;}for(int i = 2; i<=n; i++) printf("%lld\n",ans[i]);puts("0");return 0 ;
}
【CodeForces - 722C】Destroying Array(并查集,时光倒流)相关推荐
- 第 254 场力扣周赛(KMP、贪心、快速幂、二分+多源bfs、并查集 + 时光倒流)
第 254 场力扣周赛 稀里糊涂双眼双眼惺忪的做了三道,错了4次...还是600来名 5843. 作为子字符串出现在单词中的字符串数目 题目描述 给你一个字符串数组 patterns 和一个字符串 w ...
- CodeForces - 722C Destroying Array (并查集/集合的插入和删除)
原题链接:https://vjudge.net/problem/511814/origin Description: You are given an array consisting of n no ...
- CodeForces - 722C Destroying Array(倒着并查集+离线处理)
题目链接:点击查看 题目大意:给出一个数列a,现在给出操作b,每次操作都会删除掉数列a中指定位置的数,问每次删除后,最大连续字段和是多少 题目分析:一开始看到最大连续字段和,以为是要用dp,又看了一下 ...
- Codeforces 722C. Destroying Array
C. Destroying Array time limit per test 1 second memory limit per test 256 megabytes input standard ...
- CodeForces 722C Destroying Array
并查集,离线操作. 将操作倒着进行,一开始所有数字都没有加入到数组中,然后倒着一个一个加入,更新最大值. #pragma comment(linker, "/STACK:1024000000 ...
- codeforces 722C Destroying Array
题意:给出长度为n的序列,每次去掉一个数,使得序列分成几块,问当前权值最大块的权值. 思路:提供两种,第一种用multiset和前缀和直接暴力模拟. 第二种用并差集,假设坐标i为一个去掉的数,那么f[ ...
- Codeforces C. Destroying Array
C. Destroying Array time limit per test 1 second memory limit per test 256 megabytes input standard ...
- CodeForces - 123A prime permutation(并查集,水题)
题目链接:点击查看 题目大意:给出一个字符串s,问能否通过重组其字母顺序,从而满足:若字符串下标从1开始,对于每一个质数下标,满足 题目分析:其实在纸上稍微写写画画就能看出个大概的规律,当字符串的长度 ...
- CodeForces - 468B Two Sets(并查集+思维)
题目链接:点击查看 题目大意:现在给出两个集合A和B,再给出两个数a和b,现在规定在集合A中的数x必须满足x和a-x同时在集合a中,而在集合B中的数x也同样需要满足x和b-x同时在集合B中,现在给出一 ...
- Harmonious Graph CodeForces - 1253D(思维+并查集)
You're given an undirected graph with n nodes and m edges. Nodes are numbered from 1 to n. The graph ...
最新文章
- 微信小程序的数字有部分会自动加粗的解决方法
- 1.6万亿参数,秒杀GPT-3!谷歌推出超级语言模型Switch Transformer,比T5快4倍
- Adam公式+参数解析
- 链接写不到txt文件该怎么办呢
- 解决:delphi7 license is invalid or has expired
- mysql seconds_behind_master_MySQL中的seconds_behind_master的理解
- 腾讯:干掉头条,先拿抖音开刀!
- python使用级数pi的近似值_JavaScript与Python计算pi的近似值运行时间对比
- python界面-Python GUI 编程(Tkinter)
- oracle sql 导入mysql数据库备份_使用PL/SQL连接oracle数据库,并将数据进行导出备份和导入恢复...
- octave c++函数中调用fortran77子程序
- 用matlab模拟3电荷,基于Matlab模拟点电荷电场线和等势线
- 高等代数——大学高等代数课程创新教材(丘维声)——1.3笔记+习题
- 教职工信息管理系统(C++)
- android apk反编译(Doapk工具和dex2jar工具介绍)
- python输出姓名_Python简单生成随机姓名的方法示例
- Ionic之自定义icon大小
- ICCV2021中的时序动作检测算法
- 从零搭建Spring Boot脚手架(2):增加通用的功能(转载)
- 你都为美白缴过哪些智商税? | Alfred数据室
热门文章
- 制作完整的java可执行文件
- 工程中选择数据结构和算法的依据
- [算法][二分查找][排除法]
- python可以开发exe软件吗_python能开发exe软件吗
- python抓取交易所_Python百行代码抓取美股三大交易所历史数据
- for循环数据量太大_中文文本分类roberta大力出奇迹之数据量大的问题
- Vim案列掌握vim的基本操作——案例一:vim创建编写txt文件
- 如何根据原理图画封装_常用原理图封装
- 芯片设计中的latch_Latch-up (闩锁效应)
- 让一个动画一直执行的属性是_iOS 动画 一