bzoj 4094(线段树)
来源:互联网 发布:钢结构强度校核软件 编辑:程序博客网 时间:2024/06/07 15:26
传送门
题解:用线段树维护区间四个信息(左端点选/不选且右端点选/不选的区间最大不连续和),再记录四个信息中的最大值,然后每次修改都pushup到根并输出根的最大值即可。
#include<bits/stdc++.h>using namespace std;#define root 1,1,n#define lson rt<<1,l,mid#define rson rt<<1|1,mid+1,rtypedef long long ll;const int MAXN=4e4+4;int n,m,a[MAXN];struct SegTree { ll t[2][2]; ll mx; SegTree() {t[0][0]=t[1][1]=t[0][1]=t[1][0]=mx=0;}}node[MAXN<<2];inline void pushup(int rt) { node[rt].t[1][1]=max(node[rt<<1].t[1][0]+node[rt<<1|1].t[1][1],node[rt<<1].t[1][1]+node[rt<<1|1].t[0][1]); node[rt].t[0][1]=max(node[rt<<1].t[0][1]+node[rt<<1|1].t[0][1],node[rt<<1].t[0][0]+node[rt<<1|1].t[1][1]); node[rt].t[1][0]=max(node[rt<<1].t[1][1]+node[rt<<1|1].t[0][0],node[rt<<1].t[1][0]+node[rt<<1|1].t[1][0]); node[rt].t[0][0]=max(node[rt<<1].t[0][0]+node[rt<<1|1].t[1][0],node[rt<<1].t[0][1]+node[rt<<1|1].t[0][0]); node[rt].mx=max(max(node[rt].t[0][0],node[rt].t[1][1]),max(node[rt].t[1][0],node[rt].t[0][1]));}void build(int rt,int l,int r) { if (l==r) {node[rt].mx=node[rt].t[1][1]=a[l];return ;} int mid=l+r>>1; build(lson); build(rson); pushup(rt);}void modify(int rt,int l,int r,int pos,int val) { if (l==r) {node[rt].mx=node[rt].t[1][1]=val;return ;} int mid=l+r>>1; if (pos<=mid) modify(lson,pos,val); else modify(rson,pos,val); pushup(rt);}inline int read() { int x=0;char c=getchar(); while (c<'0'||c>'9') c=getchar(); while (c>='0'&&c<='9') x=x*10+c-'0',c=getchar(); return x;}ll ret=0;int main() {// freopen("bzoj 4094.in","r",stdin); n=read(),m=read(); for (register int i=1;i<=n;++i) a[i]=read(); build(root); for (register int CR7=0;CR7<m;++CR7) { int pos=read(),val=read(); modify(root,pos,val); ret+=node[1].mx; } printf("%lld\n",ret); return 0;}
阅读全文
0 0
- bzoj 4094(线段树)
- bzoj 1756(线段树)
- bzoj 3702: 二叉树 (线段树)
- BZOJ 2819 Nim (树链剖分+线段树)
- BZOJ 2243 染色(树链剖分+线段树)
- bzoj 3339: Rmq Problem(线段树)
- bzoj 4127: Abs(树链剖分+线段树)
- bzoj 2957: 楼房重建(线段树)
- bzoj 3747: [POI2015]Kinoman(线段树)
- 【bzoj 3747】[POI2015]Kinoman(线段树)
- bzoj 3838: [Pa2013]Raper (线段树)
- bzoj 4262: Sum (线段树)
- bzoj 1558: [JSOI2009]等差数列 (线段树)
- bzoj 4653: [Noi2016]区间 (线段树)
- BZOJ 2957 楼房重建 (线段树)
- BZOJ 1067 降雨量 (线段树)
- bzoj 4551(DFS序+线段树)
- bzoj 4756(线段树合并)
- 数组排序c/c++
- 51nod 1267 4个数和为0
- jdk中哪些类是不能继承的
- 半监督学习
- CodeForces
- bzoj 4094(线段树)
- SpringMVC--ContextLoaderListener
- 【XSY1284】【BZOJ3813】【清华集训2014】奇数国 线段树 数学
- no link present. Check cable 报错
- 不可不知的socket和TCP连接过程
- js-字符串扩展
- 【收藏篇】9月优秀技术博文整合,值得收藏!
- Egg + Vue 服务端渲染工程化实现
- 买卖股票的最佳时机 IV -LintCode