GSS系列
GSS1
直接维护静态区间和即可
- #include<bits/stdc++.h>
- using namespace std;
- const int N=;
- int n,a[N];
- struct Seg_Tree{int lmax,rmax,dat,sum;}tr[N<<];
- inline void pushup(int k){
- tr[k].sum=tr[k<<].sum+tr[k<<|].sum;
- tr[k].lmax=max(tr[k<<].lmax,tr[k<<].sum+tr[k<<|].lmax);
- tr[k].rmax=max(tr[k<<|].rmax,tr[k<<|].sum+tr[k<<].rmax);
- tr[k].dat=max(max(tr[k<<].dat,tr[k<<|].dat),tr[k<<].rmax+tr[k<<|].lmax);
- }
- inline void build(int k,int l,int r){
- if(l==r)return tr[k].lmax=tr[k].rmax=tr[k].dat=tr[k].sum=a[l],void();
- int mid=(l+r)>>;
- build(k<<,l,mid);
- build(k<<|,mid+,r);
- pushup(k);
- }
- inline Seg_Tree query(int k,int l,int r,int x,int y){
- if(x<=l&&r<=y)return tr[k];
- int mid=(l+r)>>;
- if(x>mid)return query(k<<|,mid+,r,x,y);
- if(y<=mid)return query(k<<,l,mid,x,y);
- Seg_Tree a=query(k<<,l,mid,x,y),b=query(k<<|,mid+,r,x,y),ans;
- ans.sum=a.sum+b.sum;
- ans.lmax=max(a.lmax,a.sum+b.lmax);
- ans.rmax=max(b.rmax,b.sum+a.rmax);
- ans.dat=max(max(a.dat,b.dat),a.rmax+b.lmax);
- return ans;
- }
- int main(){
- scanf("%d",&n);
- for(int i=;i<=n;i++)
- scanf("%d",&a[i]);
- build(,,n);
- int q,l,r;
- scanf("%d",&q);
- while(q--){
- scanf("%d%d",&l,&r);
- printf("%d\n",query(,,n,l,r).dat);
- }
- }
GSS3
加入单点查询就好了
- #include<bits/stdc++.h>
- using namespace std;
- const int N=;
- int n,a[N];
- struct Seg_Tree{int lmax,rmax,dat,sum;}tr[N<<];
- inline void pushup(int k){
- tr[k].sum=tr[k<<].sum+tr[k<<|].sum;
- tr[k].lmax=max(tr[k<<].lmax,tr[k<<].sum+tr[k<<|].lmax);
- tr[k].rmax=max(tr[k<<|].rmax,tr[k<<|].sum+tr[k<<].rmax);
- tr[k].dat=max(max(tr[k<<].dat,tr[k<<|].dat),tr[k<<].rmax+tr[k<<|].lmax);
- }
- inline void build(int k,int l,int r){
- if(l==r)return tr[k].lmax=tr[k].rmax=tr[k].dat=tr[k].sum=a[l],void();
- int mid=(l+r)>>;
- build(k<<,l,mid);
- build(k<<|,mid+,r);
- pushup(k);
- }
- inline Seg_Tree query(int k,int l,int r,int x,int y){
- if(x<=l&&r<=y)return tr[k];
- int mid=(l+r)>>;
- if(x>mid)return query(k<<|,mid+,r,x,y);
- if(y<=mid)return query(k<<,l,mid,x,y);
- Seg_Tree a=query(k<<,l,mid,x,y),b=query(k<<|,mid+,r,x,y),ans;
- ans.sum=a.sum+b.sum;
- ans.lmax=max(a.lmax,a.sum+b.lmax);
- ans.rmax=max(b.rmax,b.sum+a.rmax);
- ans.dat=max(max(a.dat,b.dat),a.rmax+b.lmax);
- return ans;
- }
- inline void change(int k,int l,int r,int x,int v){
- if(x>r||x<l)return;
- if(l==r&&l==x)return tr[k].lmax=tr[k].rmax=tr[k].dat=tr[k].sum=v,void();
- int mid=(l+r)>>;
- change(k<<,l,mid,x,v);
- change(k<<|,mid+,r,x,v);
- pushup(k);
- }
- int main(){
- scanf("%d",&n);
- for(int i=;i<=n;i++)
- scanf("%d",&a[i]);
- build(,,n);
- int q,t,l,r;
- scanf("%d",&q);
- while(q--){
- scanf("%d%d%d",&t,&l,&r);
- if(t)printf("%d\n",query(,,n,l,r).dat);
- else change(,,n,l,r);
- }
- }
GSS系列的更多相关文章
- SPOJ GSS 系列
来怒做GSS系列了: GSS1:https://www.luogu.org/problemnew/show/SP1043 这题就是维护一个 sum , mx , lmx , rmx,转移时用结构体就好 ...
- spoj GSS系列简要题解
文章目录 GSS1 GSS2 GSS3 GSS4 GSS5 GSS6 GSS7 GSS8 传送门 这个GSSGSSGSS系列全部是跟子段有关的数据结构菜题. 于是来水一篇博客. GSS1 传送门 题意 ...
- SPOJ GSS系列
众所周知的仅次于ynoi的毒瘤数据结构系列.(跟Qtree系列并列?) GSS1: 长度为 $n$ 的序列 $a$,$m$ 个询问,每次询问区间 $[l,r]$ 之间的最大子段和. $1\le n,m ...
- SPOJ GSS系列(数据结构维护技巧入门)
题目链接 GSS $GSS1$ 对于每个询问$l$, $r$,查询$a_{l}$, $a_{l+1}$, $a_{l+2}$, ..., $a_{r}$这个序列的最大字段和. 建立线段树,每个节点维护 ...
- GSS 系列题解
GSS GSS1 随便猫树或者线段树,就可以过了 猫树不说,线段树可以维护左边最大,右边最大,区间最大,区间值然后就做出来了. //Isaunoya #pragma GCC optimize(2) # ...
- 激!GSS系列
#include <cstdio> ; ; inline int max(int, int); inline int getint(); inline void putint(int); ...
- GSS系列(1)——GSS1&&GSS3
题意:询问一个区间内的最大连续子段和(GSS1),并且有单点修改的操作(GSS2). 思路:这个题目在老人家的大白鼠里出现过,不过那个是求两个下标,并且相同取更小值.——传的东西更多,判断也稍微繁琐一 ...
- GSS系列题解——最大子段和系列
开坑啦! 2019 3/28 以前一直不知道怎么搞最大子段和,如今终于可以学习,其实真的很简单啊. 2019 3/29 树链剖分上最大子段和也OK啦 前置技能:线段树 题目大意:询问区间[l,r]的最 ...
- SPOJ GSS3 线段树系列1
SPOJ GSS系列真是有毒啊! 立志刷完,把线段树搞完! 来自lydrainbowcat线段树上的一道例题.(所以解法参考了lyd老师) 题意翻译 n 个数, q 次操作 操作0 x y把 Ax 修 ...
随机推荐
- 了解一下zookeeper,搭建单机版和集群版的环境玩玩,需要手稿的,留下邮箱
第一章:Zookeeper介绍 Zookeeper,动物管理员,是用来管理hadoop(大象).Hive(蜜蜂).Pig(小猪)的管理员. Apache Hbase和Apache Solr的分布式集群 ...
- [leetcode] #279 Perfect Squares (medium)
原题链接 题意: 给一个非整数,算出其最少可以由几个完全平方数组成(1,4,9,16……) 思路: 可以得到一个状态转移方程 dp[i] = min(dp[i], dp[i - j * j] + ) ...
- jQuery入门二(DOM对象与jQuery对象互相转换)
- DOM对象与jQuery对象互相转换 第一篇说过,DOM对象不能调用jQuery对象的属性和方法,同样jQuery对象也不能调用DOM对象的属性和方法.但是在实际开发中,可能两者间需要互相调用对方 ...
- 机器学习经典分类算法 —— k-近邻算法(附python实现代码及数据集)
目录 工作原理 python实现 算法实战 约会对象好感度预测 故事背景 准备数据:从文本文件中解析数据 分析数据:使用Matplotlib创建散点图 准备数据:归一化数值 测试算法:作为完整程序验证 ...
- NLP(十二)依存句法分析的可视化及图分析
依存句法分析的效果虽然没有像分词.NER的效果来的好,但也有其使用价值,在日常的工作中,我们免不了要和其打交道.笔者这几天一直在想如何分析依存句法分析的结果,一个重要的方面便是其可视化和它的图分析 ...
- 【Android】未引入包问题
Mac 上配置 Android 开发环境,遇到了下面问题: /Users/***/Documents/SVN/Android/***/1.0.3/res/values/styles.xml:21: e ...
- 最火的分布式 HTAP 数据库 TiDB - 入门实践教程
偶然在某篇博客看到了 TiDB,一个融合 OLTP 和 OLAP 的分布式开源数据库, GitHub 上 Star 很多,然后 watch 了,发现 commit 和 pull request 一直都 ...
- 【nodejs原理&源码赏析(9)】用node-ssh实现轻量级自动化部署
目录 一. 需求描述 二. 预备知识 IP+端口访问 域名访问 三. Nodejs应用的手动部署 四. 基于nodejs的自动部署 4.1 package.json中的scripts 4.2 自动化发 ...
- 的Blog
作者:Ovear链接:https://www.zhihu.com/question/20215561/answer/40316953来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...
- 一文带你彻底理解 JavaScript 原型对象
一.什么是原型 原型是Javascript中的继承的基础,JavaScript的继承就是基于原型的继承. 1.1 函数的原型对象 在JavaScript中,我们创建一个函数A(就是声明一个函数), 那 ...