GSS1】的更多相关文章

题意:询问一个区间内的最大连续子段和(GSS1),并且有单点修改的操作(GSS2). 思路:这个题目在老人家的大白鼠里出现过,不过那个是求两个下标,并且相同取更小值.——传的东西更多,判断也稍微繁琐一些... 考虑我们平时如何处理最大连续子段和——O(n)DP,然而显然在一个时刻会修改的序列上无法实现.我们至少需要一个O(nlgn)的算法.考虑到这种连续的和可以对应线段树的一些操作,我们就将它应用到线段树上. 老人家在讲子段和的时候提供了一种分治算法——如果将一段序列分成两端,那么它的最大子段和…
gss2调了一下午,至今还在wa... 我的做法是:对于询问按右区间排序,利用splay记录最右的位置.对于重复出现的,在splay中删掉之前出现的位置所在的节点,然后在splay中插入新的节点.对于没有出现过的,直接插入.询问时直接统计区间的最大子段和. gss2没能调出bug,所以看了一下以下的gss3,发现跟gss1基本一样.直接上代码 以上的做法是错的,对于这种数据就过不了.姿势不对,囧 44 -2 3 -211 4 GSS Can you answer these queries II…
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…
于是我拿合并返回节点的线段树(我也不知道应该叫什么名)水了一下$GSS1$ 比$NOIp$之前写的不知道高到哪里去了,并且只用了$\frac{1}{3}$的时间 #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #define lc x<<1 #define rc x<<1|1 #define mid ((l+r)>>…
传送门 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…
SP1043 GSS1 - Can you answer these queries I 题目描述 给出了序列A[1],A[2],-,A[N]. (a[i]≤15007,1≤N≤50000).查询定义如下: 查询(x,y)=max{a[i]+a[i+1]+...+a[j]:x≤i≤j≤y}. 给定M个查询,程序必须输出这些查询的结果. 输入输出格式 输入格式: 输入文件的第一行包含整数N. 在第二行,N个数字跟随. 第三行包含整数M. M行跟在后面,其中第1行包含两个数字xi和yi. 输出格式:…
题目链接:https://vjudge.net/problem/SPOJ-GSS1 GSS1 - Can you answer these queries I #tree You are given a sequence A[1], A[2], ..., A[N] . ( |A[i]| ≤ 15007 , 1 ≤ N ≤ 50000 ). A query is defined as follows: Query(x,y) = Max { a[i]+a[i+1]+...+a[j] ; x ≤ i…
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=…
线段树然后yy一下,搞一搞. GSS1: 题意:求最大区间和. #include <cstdio> #include <algorithm> using namespace std; int lm[200005],rm[200005],ma[200005],s[200005],left,right,n,m,ans,rans; void build(int l,int r,int num){ if(l==r){scanf("%d",&ma[num]);rm…
Can you answer these queries I SPOJ - GSS1 You are given a sequence A[1], A[2], -, A[N] . ( |A[i]| ≤ 15007 , 1 ≤ N ≤ 50000 ). A query is defined as follows: Query(x,y) = Max { a[i]+a[i+1]+-+a[j] ; x ≤ i ≤ j ≤ y }. Given M queries, your program must o…