题目链接

简单说就是带修的查询区间最大子段和,用线段树维护即可

对于每个区间,我们肯定要记录它的最大子段和\(v\),但是怎么维护呢?

我们可以记录下从区间左端点开始的最大子段和\(v1\),从右端点开始的最大子段和\(v2\)以及区间和\(sum\)

那么\(t[p].sum=t[lc].sum+t[rc].sum\)

\(t[p].v1=max(t[lc].v1,t[lc].sum+t[rc].v1)\)

\(t[p].v2=max(t[rc].v 2,t[rc].sum+t[lc].v2)\)

\(t[p].v=max(t[lc].v2+t[rc].v1,t[lc].v,t[rc].v)\)

正确性应该很显然不需要再给出证明了吧

下放代码

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cctype>
#define ll long long
#define gc getchar
#define maxn 50005
using namespace std; inline ll read(){
ll a=0;int f=0;char p=gc();
while(!isdigit(p)){f|=p=='-';p=gc();}
while(isdigit(p)){a=(a<<3)+(a<<1)+(p^48);p=gc();}
return f?-a:a;
}int n,m; struct ahaha{
int v,v1,v2,sum;
}t[maxn<<2];
#define lc p<<1
#define rc p<<1|1
inline void pushup(int p){
t[p].sum=t[lc].sum+t[rc].sum;
t[p].v1=max(t[lc].v1,t[lc].sum+t[rc].v1);
t[p].v2=max(t[rc].v2,t[rc].sum+t[lc].v2);
t[p].v=max(t[lc].v2+t[rc].v1,max(t[lc].v,t[rc].v));
}
void build(int p,int l,int r){
if(l==r){t[p].v=t[p].v1=t[p].v2=t[p].sum=read();return;}
int m=l+r>>1;
build(lc,l,m);build(rc,m+1,r);
pushup(p);
}
ahaha query(int p,int l,int r,int L,int R){
if(l>R||r<L)return {-214748,-214748,-214748,-214748};
if(L<=l&&r<=R)return t[p];
int m=l+r>>1;
ahaha l1=query(lc,l,m,L,R),r1=query(rc,m+1,r,L,R),i;
i.sum=l1.sum+r1.sum;
i.v1=max(l1.v1,l1.sum+r1.v1);
i.v2=max(r1.v2,r1.sum+l1.v2);
i.v=max(l1.v2+r1.v1,max(l1.v,r1.v));
return i;
} inline void solve(){
int x=read(),y=read();
printf("%d\n",query(1,1,n,x,y).v);
} int main(){
n=read();
build(1,1,n);
m=read();
while(m--)
solve();
return 0;
}

SP1043 GSS1的更多相关文章

  1. 线段树 SP1043 GSS1 - Can you answer these queries I

    SP1043 GSS1 - Can you answer these queries I 题目描述 给出了序列A[1],A[2],-,A[N]. (a[i]≤15007,1≤N≤50000).查询定义 ...

  2. 解题报告:SP1043 GSS1

    题目链接:SP1043 GSS1 - Can you answer these queries I 对,\(GSS\)毒瘤数据结构题,就是我在这篇文章中提到的紫题. 相对其他\(GSS\)题简单些,但 ...

  3. [SP1043] GSS1 - Can you answer these queries I

    传送门:>Here< 题意:求区间最大子段和 $N \leq 50000$ 包括多组询问(不需要支持修改) 解题思路 线段树的一道好题 我们可以考虑,如果一组数据全部都是正数,那么问题等同 ...

  4. 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} ...

  5. 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 ...

  6. SP1043 GSS1 - Can you answer these queries I 线段树

    问题描述 LG-SP1043 题解 GSS 系列第一题. \(q\) 个询问,求 \([x,y]\) 的最大字段和. 线段树,维护 \([x,y]\) 的 \(lmax,rmax,sum,val\) ...

  7. 线段树【SP1043】GSS1 - Can you answer these queries I

    Description 给出了序列\(A_1,A_2,-,A_n\). \(a_i \leq 15007,1 \leq n \leq 50000\).查询定义如下: 查询\((x,y)=max{a_i ...

  8. 题解【SP1043】 GSS1 - Can you answer these queries I

    题目描述 You are given a sequence \(A_1, A_2, ..., A_n(|A_i|≤15007,1≤N≤50000)\). A query is defined as f ...

  9. 「SP1043」GSS1 - Can you answer these queries I

    传送门 Luogu 解题思路 这题就是 GSS3 的一个退化版,不带修改操作的区间最大子段和,没什么好讲的. 细节注意事项 咕咕咕 参考代码 #include <algorithm> #i ...

随机推荐

  1. Android 绘图时实现双缓冲

    一.双缓冲技术原理: 在内存中创建一片内存区域,把将要绘制的图片预先绘制到内存中,在绘制显示的时候直接获取缓冲区的图片进行绘制.更具体一点来说:先通过setBitmap方法将要绘制的所有的图形绘制到一 ...

  2. 【Nodejs】Browsersync同步浏览器测试

    说明文档:http://www.browsersync.cn/docs/ 安装命令: ①全局安装 npm install -g browser-sync ②局部/本地安装 npm install br ...

  3. 20155216 Exp9 Web安全基础实践

    Exp9 Web安全基础实践 基础问题回答 1.SQL注入攻击原理,如何防御? 1.对用户的输入进行校验,可以通过正则表达式,双"-"进行转换等. 2.不要使用动态拼装sql,可以 ...

  4. 20155232《网络对抗》Exp5 MSF基础应用

    20155232<网络对抗>Exp5 MSF基础应用 基础问题回答 用自己的话解释什么是exploit,payload,encode. exploit:就是利用可能存在的漏洞对目标进行攻击 ...

  5. WPF 初学VisifireChart

    visifire今天登陆他们官网的时候,发现好像是挂掉了,不知道是不再运营了,还是单纯服务器出了问题. VisifireChart的效果不炫,但是对于一些项目,感觉够用的,所以,今天大概看了几篇博客, ...

  6. mfc 友元类

    知识点 继承类成员的访问级别 友元类 继承访问控制: 基类 派生类(能否访问) public private protected 派生类类 派生类对象 派生类 派生类对象 派生类类 派生类对象 pri ...

  7. Ms.office2010安装教程

    下面用到的软件下载地址如下:http://pan.baidu.com/s/1c08cxPI 第一步 1. 将压缩包office2010.rar解压解压后,会出现一个office2010文件夹如图1.1 ...

  8. kali2.0 使用SSH进行远程登录

    工具/原料 kali 2.0 ssh SSH连接工具(XShell)   一.配置SSH参数 修改sshd_config文件,命令为: vi /etc/ssh/sshd_config 将#Passwo ...

  9. mysql 配置 root 远程访问

    来源: https://www.cnblogs.com/24la/p/mariadb-remoting-access.html 首先配置允许访问的用户,采用授权的方式给用户权限 GRANT ALL P ...

  10. 有关ADO.NET基础中的基础的熟悉过程

    现在对于ADO.NET基础的理解与记忆并不严谨和完善 所以,只写一点关于自己的理解,嗯,一种去转换思维理解的方法吧,算是吧 希望各位前辈或者同学,积极指出其中的错误和偏差 个人对于刚接触的ADO.NE ...