本文主要是介绍bzoj2653(可持久化线段树),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
新姿势
注意区间的合并问题,比如最大前缀和最大后缀的合并,表示被这里卡了好长时间
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<utility>
#define fi first
#define se second
#define MK(a,b) make_pair((a),(b))
#define pii pair<int,int>
using namespace std;
const int N=20005;int n,m;
int val[N],to[N],rt[N];
pii b[N];int tot;
struct aa
{int l,r,lc,rc,sum,qz,hz;int len(){return r-l+1;}
}a[N*30];void up(int u)
{int l=a[u].lc,r=a[u].rc;a[u].sum=a[l].sum+a[r].sum;a[u].qz=max(a[l].sum+a[r].qz,a[l].qz);a[u].hz=max(a[r].sum+a[l].hz,a[r].hz);
}
void build(int &u,int l,int r)
{u=++tot;a[u].l=l,a[u].r=r;if (l==r) {a[u].sum=a[u].qz=a[u].hz=1;return ;}int mid=(l+r)>>1;build(a[u].lc,l,mid);build(a[u].rc,mid+1,r);up(u);
}
void i
这篇关于bzoj2653(可持久化线段树)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!