codefoces 722C - Destroying Array
来源:互联网 发布:java游戏超级玛丽代码 编辑:程序博客网 时间:2024/06/05 10:03
You are given an array consisting of n non-negative integersa1, a2, ..., an.
You are going to destroy integers in the array one by one. Thus, you are given the permutation of integers from1 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 be0.
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.
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 firsti operations are performed.
41 3 2 53 4 1 2
5430
51 2 3 4 54 2 3 5 1
65510
85 5 4 4 6 6 5 55 2 8 7 1 3 4 6
18161188660
Note
Consider the first sample:
- Third element is destroyed. Array is now 1 3 * 5. Segment with maximum sum5 consists of one integer 5.
- Fourth element is destroyed. Array is now 1 3 * * . Segment with maximum sum4 consists of two integers 1 3.
- First element is destroyed. Array is now * 3 * * . Segment with maximum sum3 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 to0.
#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=1e5+100;int f[N];void init(){ for(int i=0; i<=N; i++) f[i]=i;}int a[N],b[N],vis[N];ll sum[N];vector<ll>ans;int find(int x){ return f[x]==x?x:f[x]=find(f[x]);}void hebing(int x,int y){ f[x]=y; sum[y]+=sum[x];}int main(){ int n; scanf("%d",&n); init(); memset(vis,0,sizeof(vis)); memset(sum,0,sizeof(sum)); for(int i=1; i<=n; i++) scanf("%d",&a[i]); for(int i=1; i<=n; i++) scanf("%d",&b[i]); ll res=0; ans.clear(); for(int i=n; i>=1; i--) { ans.push_back(res); int x=b[i]; vis[x]=1; sum[x]=a[x]; if(vis[x+1]) { int y=find(x+1); hebing(y,x); } if(vis[x-1]) { int y=find(x-1); hebing(y,x); } res=max(res,sum[x]); } int sz=ans.size(); for(int i=sz-1; i>=0; i--) cout<<ans[i]<<endl;}
- codefoces 722C - Destroying Array
- codeforces 722C Destroying Array
- codeforces(722c)-Destroying Array
- Codeforces 722C. Destroying Array
- codeforces 722C. Destroying Array
- 【37.38%】【codeforces 722C】Destroying Array
- 722C - Destroying Array 线段树
- codeforces 722C Destroying Array 【线段树好题】
- codeforces 722C. Destroying Array map+multiset
- Codeforces 722C - Destroying Array By Assassin
- CodeForces - 722C Destroying Array (set)
- Codeforces #722C: Destroying Array 题解
- codeforces 722C Destroying Array 并查集带权
- Codeforces722 C Destroying Array
- codeforces-772C-Destroying Array
- Codeforces Round 722C:Destroying Array(离线)
- codeforces 722C Destroying Array ( 并查集 / Multiset )
- 并查集(Destroying Array,cf 722C)
- 第八周实践污损的单据
- Java NIO:NIO概述
- Spring mvc中@RequestMapping 6个基本用法小结
- 如何正确导入下载的开源项目之gradle部分
- Canvas模拟地球,月球公转
- codefoces 722C - Destroying Array
- java中private,public,protected的区别
- 配对游戏
- html中如何使用bootstrap
- 欢迎使用CSDN-markdown编辑器
- 【SpringBoot教程三】:配置文件和多环境配置
- 读书与工作
- Session入Memcache缓存
- Android动画分类