codeforces 722C. Destroying Array map+multiset
来源:互联网 发布:udp端口号是多少 编辑:程序博客网 时间:2024/05/21 02:19
题意:给你一个由1~n随意排列的序列,进行n次删除,每次删除一个数,每次删除后输出最大连续子串和,被删除的数会变成空位。
比赛的时候想到了思路,没想到用map和multiset,用链表去记录了区间,结果坑在了链表上,赛后看到大神们用了map和multiset才学着写了这么一发。
思路:先预处理将从0到i(i属于1~n)的和算出来,这样每删除一个数c,则其左侧区间的和为sum[c-1]-sum[l],右侧区间的和为sum[r]-sum[c],(l,r其他区间的右,左端点),用map记录各个区间的左右端点,每删除一个点,在map中找到改点所在的区间,删除这个区间并将新的区间加入map,同时更新multiset中的和值。这里主要是利用了multiset和map内部自动排序的功能。另外学姐用线段树过了一发,学姐真吊。
#include<bits/stdc++.h>#define MEM(a,x) memset(a,x,sizeof(a));#define MEMINF(a) memset(a,0x3f,sizeof(a));using namespace std;typedef long long LL;const int MAXN=1e5+10;const int INF=0x3f3f3f3f;const int MOD=1000000007;int n;map<int,int>mp;multiset<LL> ms;LL sum[MAXN];int main(){ scanf("%d",&n); sum[0]=0; int a; for (int i=1; i<=n; ++i) { scanf("%d",&a); sum[i]=sum[i-1]+(LL)a; } mp[0]=n; ms.insert(-sum[n]+sum[0]); int c; for (int i=1; i<=n; ++i) { scanf("%d",&c); auto ite=mp.lower_bound(c); ite--; int l=ite->first; int r=ite->second; mp.erase(ite); ms.erase(ms.find(sum[l]-sum[r])); if (l<c-1) { ms.insert(sum[l]-sum[c-1]); //printf("%lld",sum[l]-sum[c-1]); mp[l]=c-1; } if (c<r) { ms.insert(sum[c]-sum[r]); mp[c]=r; } if(i!=n) printf("%I64d\n",-*ms.begin()); else puts("0"); }}
0 0
- codeforces 722C. Destroying Array map+multiset
- codeforces 722C Destroying Array ( 并查集 / Multiset )
- codeforces 722C Destroying Array
- codeforces(722c)-Destroying Array
- Codeforces 722C. Destroying Array
- codeforces 722C. Destroying Array
- 【37.38%】【codeforces 722C】Destroying Array
- codeforces 722C Destroying Array 【线段树好题】
- Codeforces 722C - Destroying Array By Assassin
- CodeForces - 722C Destroying Array (set)
- Codeforces #722C: Destroying Array 题解
- codeforces 722C Destroying Array 并查集带权
- codeforces-772C-Destroying Array
- Codeforces Round 722C:Destroying Array(离线)
- codeforces 722C. Destroying Array(并查集||set)
- CodeForces 722C Destroying Array(数组删除区间最大值)
- CodeForces 722C. Destroying Array(逆向思维)
- 【Codeforces 722 C Destroying Array】+ 并查集
- C - 数据结构 - 线性表 - 链式实现
- |洛谷|模拟|P1203 [USACO1.1]坏掉的项链Broken Necklace
- 欢迎使用CSDN-markdown编辑器
- 1055. The World's Richest (25)
- OpenLayers+Geoserver 简单入坑
- codeforces 722C. Destroying Array map+multiset
- 1004 Acute Stroke
- Java构造器的深入理解
- 文件与file与os
- 关系模型和关系代数
- 前端常用的优化方法
- 向yml文件传递参数,ansible-playbook命令
- ioctrl 详解
- angular的表格排序、分页和一些基本操作