GSS1

直接维护静态区间和即可

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N=;
  4. int n,a[N];
  5. struct Seg_Tree{int lmax,rmax,dat,sum;}tr[N<<];
  6. inline void pushup(int k){
  7. tr[k].sum=tr[k<<].sum+tr[k<<|].sum;
  8. tr[k].lmax=max(tr[k<<].lmax,tr[k<<].sum+tr[k<<|].lmax);
  9. tr[k].rmax=max(tr[k<<|].rmax,tr[k<<|].sum+tr[k<<].rmax);
  10. tr[k].dat=max(max(tr[k<<].dat,tr[k<<|].dat),tr[k<<].rmax+tr[k<<|].lmax);
  11. }
  12. inline void build(int k,int l,int r){
  13. if(l==r)return tr[k].lmax=tr[k].rmax=tr[k].dat=tr[k].sum=a[l],void();
  14. int mid=(l+r)>>;
  15. build(k<<,l,mid);
  16. build(k<<|,mid+,r);
  17. pushup(k);
  18. }
  19. inline Seg_Tree query(int k,int l,int r,int x,int y){
  20. if(x<=l&&r<=y)return tr[k];
  21. int mid=(l+r)>>;
  22. if(x>mid)return query(k<<|,mid+,r,x,y);
  23. if(y<=mid)return query(k<<,l,mid,x,y);
  24. Seg_Tree a=query(k<<,l,mid,x,y),b=query(k<<|,mid+,r,x,y),ans;
  25. ans.sum=a.sum+b.sum;
  26. ans.lmax=max(a.lmax,a.sum+b.lmax);
  27. ans.rmax=max(b.rmax,b.sum+a.rmax);
  28. ans.dat=max(max(a.dat,b.dat),a.rmax+b.lmax);
  29. return ans;
  30. }
  31. int main(){
  32. scanf("%d",&n);
  33. for(int i=;i<=n;i++)
  34. scanf("%d",&a[i]);
  35. build(,,n);
  36. int q,l,r;
  37. scanf("%d",&q);
  38. while(q--){
  39. scanf("%d%d",&l,&r);
  40. printf("%d\n",query(,,n,l,r).dat);
  41. }
  42. }

GSS3

加入单点查询就好了

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N=;
  4. int n,a[N];
  5. struct Seg_Tree{int lmax,rmax,dat,sum;}tr[N<<];
  6. inline void pushup(int k){
  7. tr[k].sum=tr[k<<].sum+tr[k<<|].sum;
  8. tr[k].lmax=max(tr[k<<].lmax,tr[k<<].sum+tr[k<<|].lmax);
  9. tr[k].rmax=max(tr[k<<|].rmax,tr[k<<|].sum+tr[k<<].rmax);
  10. tr[k].dat=max(max(tr[k<<].dat,tr[k<<|].dat),tr[k<<].rmax+tr[k<<|].lmax);
  11. }
  12. inline void build(int k,int l,int r){
  13. if(l==r)return tr[k].lmax=tr[k].rmax=tr[k].dat=tr[k].sum=a[l],void();
  14. int mid=(l+r)>>;
  15. build(k<<,l,mid);
  16. build(k<<|,mid+,r);
  17. pushup(k);
  18. }
  19. inline Seg_Tree query(int k,int l,int r,int x,int y){
  20. if(x<=l&&r<=y)return tr[k];
  21. int mid=(l+r)>>;
  22. if(x>mid)return query(k<<|,mid+,r,x,y);
  23. if(y<=mid)return query(k<<,l,mid,x,y);
  24. Seg_Tree a=query(k<<,l,mid,x,y),b=query(k<<|,mid+,r,x,y),ans;
  25. ans.sum=a.sum+b.sum;
  26. ans.lmax=max(a.lmax,a.sum+b.lmax);
  27. ans.rmax=max(b.rmax,b.sum+a.rmax);
  28. ans.dat=max(max(a.dat,b.dat),a.rmax+b.lmax);
  29. return ans;
  30. }
  31. inline void change(int k,int l,int r,int x,int v){
  32. if(x>r||x<l)return;
  33. if(l==r&&l==x)return tr[k].lmax=tr[k].rmax=tr[k].dat=tr[k].sum=v,void();
  34. int mid=(l+r)>>;
  35. change(k<<,l,mid,x,v);
  36. change(k<<|,mid+,r,x,v);
  37. pushup(k);
  38. }
  39. int main(){
  40. scanf("%d",&n);
  41. for(int i=;i<=n;i++)
  42. scanf("%d",&a[i]);
  43. build(,,n);
  44. int q,t,l,r;
  45. scanf("%d",&q);
  46. while(q--){
  47. scanf("%d%d%d",&t,&l,&r);
  48. if(t)printf("%d\n",query(,,n,l,r).dat);
  49. else change(,,n,l,r);
  50. }
  51. }

GSS系列的更多相关文章

  1. SPOJ GSS 系列

    来怒做GSS系列了: GSS1:https://www.luogu.org/problemnew/show/SP1043 这题就是维护一个 sum , mx , lmx , rmx,转移时用结构体就好 ...

  2. spoj GSS系列简要题解

    文章目录 GSS1 GSS2 GSS3 GSS4 GSS5 GSS6 GSS7 GSS8 传送门 这个GSSGSSGSS系列全部是跟子段有关的数据结构菜题. 于是来水一篇博客. GSS1 传送门 题意 ...

  3. SPOJ GSS系列

    众所周知的仅次于ynoi的毒瘤数据结构系列.(跟Qtree系列并列?) GSS1: 长度为 $n$ 的序列 $a$,$m$ 个询问,每次询问区间 $[l,r]$ 之间的最大子段和. $1\le n,m ...

  4. SPOJ GSS系列(数据结构维护技巧入门)

    题目链接 GSS $GSS1$ 对于每个询问$l$, $r$,查询$a_{l}$, $a_{l+1}$, $a_{l+2}$, ..., $a_{r}$这个序列的最大字段和. 建立线段树,每个节点维护 ...

  5. GSS 系列题解

    GSS GSS1 随便猫树或者线段树,就可以过了 猫树不说,线段树可以维护左边最大,右边最大,区间最大,区间值然后就做出来了. //Isaunoya #pragma GCC optimize(2) # ...

  6. 激!GSS系列

    #include <cstdio> ; ; inline int max(int, int); inline int getint(); inline void putint(int); ...

  7. GSS系列(1)——GSS1&&GSS3

    题意:询问一个区间内的最大连续子段和(GSS1),并且有单点修改的操作(GSS2). 思路:这个题目在老人家的大白鼠里出现过,不过那个是求两个下标,并且相同取更小值.——传的东西更多,判断也稍微繁琐一 ...

  8. GSS系列题解——最大子段和系列

    开坑啦! 2019 3/28 以前一直不知道怎么搞最大子段和,如今终于可以学习,其实真的很简单啊. 2019 3/29 树链剖分上最大子段和也OK啦 前置技能:线段树 题目大意:询问区间[l,r]的最 ...

  9. SPOJ GSS3 线段树系列1

    SPOJ GSS系列真是有毒啊! 立志刷完,把线段树搞完! 来自lydrainbowcat线段树上的一道例题.(所以解法参考了lyd老师) 题意翻译 n 个数, q 次操作 操作0 x y把 Ax 修 ...

随机推荐

  1. 了解一下zookeeper,搭建单机版和集群版的环境玩玩,需要手稿的,留下邮箱

    第一章:Zookeeper介绍 Zookeeper,动物管理员,是用来管理hadoop(大象).Hive(蜜蜂).Pig(小猪)的管理员. Apache Hbase和Apache Solr的分布式集群 ...

  2. [leetcode] #279 Perfect Squares (medium)

    原题链接 题意: 给一个非整数,算出其最少可以由几个完全平方数组成(1,4,9,16……) 思路: 可以得到一个状态转移方程  dp[i] = min(dp[i], dp[i - j * j] + ) ...

  3. jQuery入门二(DOM对象与jQuery对象互相转换)

    - DOM对象与jQuery对象互相转换 第一篇说过,DOM对象不能调用jQuery对象的属性和方法,同样jQuery对象也不能调用DOM对象的属性和方法.但是在实际开发中,可能两者间需要互相调用对方 ...

  4. 机器学习经典分类算法 —— k-近邻算法(附python实现代码及数据集)

    目录 工作原理 python实现 算法实战 约会对象好感度预测 故事背景 准备数据:从文本文件中解析数据 分析数据:使用Matplotlib创建散点图 准备数据:归一化数值 测试算法:作为完整程序验证 ...

  5. NLP(十二)依存句法分析的可视化及图分析

      依存句法分析的效果虽然没有像分词.NER的效果来的好,但也有其使用价值,在日常的工作中,我们免不了要和其打交道.笔者这几天一直在想如何分析依存句法分析的结果,一个重要的方面便是其可视化和它的图分析 ...

  6. 【Android】未引入包问题

    Mac 上配置 Android 开发环境,遇到了下面问题: /Users/***/Documents/SVN/Android/***/1.0.3/res/values/styles.xml:21: e ...

  7. 最火的分布式 HTAP 数据库 TiDB - 入门实践教程

    偶然在某篇博客看到了 TiDB,一个融合 OLTP 和 OLAP 的分布式开源数据库, GitHub 上 Star 很多,然后 watch 了,发现 commit 和 pull request 一直都 ...

  8. 【nodejs原理&源码赏析(9)】用node-ssh实现轻量级自动化部署

    目录 一. 需求描述 二. 预备知识 IP+端口访问 域名访问 三. Nodejs应用的手动部署 四. 基于nodejs的自动部署 4.1 package.json中的scripts 4.2 自动化发 ...

  9. 的Blog

    作者:Ovear链接:https://www.zhihu.com/question/20215561/answer/40316953来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...

  10. 一文带你彻底理解 JavaScript 原型对象

    一.什么是原型 原型是Javascript中的继承的基础,JavaScript的继承就是基于原型的继承. 1.1 函数的原型对象 在JavaScript中,我们创建一个函数A(就是声明一个函数), 那 ...