GSS系列(1)——GSS1&&GSS3】的更多相关文章

传送门 gss1 gss3 spoj gss系列=最大字段和套餐 gss1就是gss3的无单点修改版 有区间查询和单点修改,考虑用线段树维护 我们要维护区间权值和\(s\),区间最大前缀和\(xl\)和最大后缀和\(xr\),以及最大子段和\(x\) 在pushup的时候,这样维护 代码里有 \[a[o].s=a[lc].s+a[rc].s\]\[a[o].xl=max(a[lc].xl,a[lc].s+a[rc].xl)\]\[a[o].xr=max(a[rc].xr,a[lc].xr+a[r…
来怒做GSS系列了: GSS1:https://www.luogu.org/problemnew/show/SP1043 这题就是维护一个 sum , mx , lmx , rmx,转移时用结构体就好了. 代码如下: #include<iostream> #include<cstdio> #include<cstring> using namespace std; typedef long long ll; ; int n,m,a[maxn]; struct N{ in…
题意:询问一个区间内的最大连续子段和(GSS1),并且有单点修改的操作(GSS2). 思路:这个题目在老人家的大白鼠里出现过,不过那个是求两个下标,并且相同取更小值.——传的东西更多,判断也稍微繁琐一些... 考虑我们平时如何处理最大连续子段和——O(n)DP,然而显然在一个时刻会修改的序列上无法实现.我们至少需要一个O(nlgn)的算法.考虑到这种连续的和可以对应线段树的一些操作,我们就将它应用到线段树上. 老人家在讲子段和的时候提供了一种分治算法——如果将一段序列分成两端,那么它的最大子段和…
文章目录 GSS1 GSS2 GSS3 GSS4 GSS5 GSS6 GSS7 GSS8 传送门 这个GSSGSSGSS系列全部是跟子段有关的数据结构菜题. 于是来水一篇博客. GSS1 传送门 题意简述:求不带修的最大子段和. 思路:直接线段树走一发. 代码: #include<bits/stdc++.h> #define ri register int using namespace std; const int N=5e4+5; int n,a[N]; inline int max(co…
众所周知的仅次于ynoi的毒瘤数据结构系列.(跟Qtree系列并列?) GSS1: 长度为 $n$ 的序列 $a$,$m$ 个询问,每次询问区间 $[l,r]$ 之间的最大子段和. $1\le n,m\le 5\times 10^4$. 经典的线段树题. 每个节点维护四个值:$sum,lmax,rmax,amax$. $sum$ 表示整个区间的和. $lmax$ 表示以 $l$ 为左端点的最大子段和. $rmax$ 表示以 $r$ 为右端点的最大子段和. $amax$ 表示整个的最大子段和. 时…
题目链接 GSS $GSS1$ 对于每个询问$l$, $r$,查询$a_{l}$, $a_{l+1}$, $a_{l+2}$, ..., $a_{r}$这个序列的最大字段和. 建立线段树,每个节点维护四个信息 $c$:当前区间的元素和 $lc$:当前区间左端点开始的最大子序列和 $rc$:当前区间右端点结束的最大子序列和 $ret$:当前区间的答案 于是我们建立线段树的时候预处理出每个节点的四个信息,查询的时候返回一个节点,这个节点的$ret$即为答案. #include <bits/stdc+…
GSS1 #include<cstdio> #include<iostream> #define lc k<<1 #define rc k<<1|1 using namespace std; ,N=M<<; struct sgt{ int sum,gss,lgss,rgss; }tr[N]; int n,m,a[N]; void updata(int k){ tr[k].sum=tr[lc].sum+tr[rc].sum; tr[k].lgss=…
GSS GSS1 随便猫树或者线段树,就可以过了 猫树不说,线段树可以维护左边最大,右边最大,区间最大,区间值然后就做出来了. //Isaunoya #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize("Ofast") #include<bits/stdc++.h> using namespace std ; inline int read() { register int x = 0 ;…
#include <cstdio> ; ; inline int max(int, int); inline int getint(); inline void putint(int); struct node { int lmax, rmax, smax, ssum; inline node(); }; inline node merge(node, node); struct seg { node data; seg * l, * r; inline void maintain(); };…
http://www.spoj.com/problems/GSS1/ 题意:无更新询问区间最大连续和. 做法:线段树每个节点维护sum[rt],maxsum[rt],lsum[rt],rsum[rt],分别区间和.区间最大和.区间左端最大和和区间右端最大和. 查询时按从左到右扫,维护ans为最大连续和,rans为到该段的右端最大连续和,扫到每一段时有: ans = max(ans,maxsum[rt]); ans = max(ans,rans+lsum[rt]); rans = max(rsum…