GSS1
于是我拿合并返回节点的线段树(我也不知道应该叫什么名)水了一下$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)>>1)
- #define lson x<<1,l,mid
- #define rson x<<1|1,mid+1,r
- using namespace std;
- typedef long long ll;
- const int N=5e5+;
- inline int read(){
- char c=getchar();int x=,f=;
- while(c<''||c>''){if(c=='-')f=-;c=getchar();}
- while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
- return x*f;
- }
- int n,Q,a,b;
- struct Node{
- int sum,mx,lm,rm;
- Node():sum(),mx(),lm(),rm(){}
- }t[N<<];
- Node Merge(Node a,Node b){
- Node re;
- re.sum=a.sum+b.sum;
- re.mx=max(a.rm+b.lm,max(a.mx,b.mx));
- re.lm=max(a.lm,a.sum+b.lm);
- re.rm=max(b.rm,b.sum+a.rm);
- return re;
- }
- void merge(int x){
- t[x].sum=t[lc].sum+t[rc].sum;
- t[x].mx=max(t[lc].rm+t[rc].lm,max(t[lc].mx,t[rc].mx));
- t[x].lm=max(t[lc].lm,t[lc].sum+t[rc].lm);
- t[x].rm=max(t[rc].rm,t[rc].sum+t[lc].rm);
- }
- void build(int x,int l,int r){
- if(l==r) t[x].sum=t[x].mx=t[x].lm=t[x].rm=read();
- else{
- build(lson);
- build(rson);
- merge(x);
- }
- }
- Node segQue(int x,int l,int r,int ql,int qr){
- if(ql<=l&&r<=qr) return t[x];
- else{
- if(qr<=mid) return segQue(lson,ql,qr);
- if(mid<ql) return segQue(rson,ql,qr);
- return Merge(segQue(lson,ql,qr),segQue(rson,ql,qr));
- }
- }
- int main(){
- freopen("in","r",stdin);
- n=read();
- build(,,n);
- Q=read();
- for(int i=;i<=Q;i++) a=read(),b=read(),printf("%d\n",segQue(,,n,a,b).mx);
- }
GSS1的更多相关文章
- GSS系列(1)——GSS1&&GSS3
题意:询问一个区间内的最大连续子段和(GSS1),并且有单点修改的操作(GSS2). 思路:这个题目在老人家的大白鼠里出现过,不过那个是求两个下标,并且相同取更小值.——传的东西更多,判断也稍微繁琐一 ...
- GSS3 SPOJ 1716. Can you answer these queries III gss1的变形
gss2调了一下午,至今还在wa... 我的做法是:对于询问按右区间排序,利用splay记录最右的位置.对于重复出现的,在splay中删掉之前出现的位置所在的节点,然后在splay中插入新的节点.对于 ...
- SPOJ GSS1 && GSS3 (无更新/更新单点,并询问区间最大连续和)
http://www.spoj.com/problems/GSS1/ 题意:无更新询问区间最大连续和. 做法:线段树每个节点维护sum[rt],maxsum[rt],lsum[rt],rsum[rt] ...
- spoj gss1 gss3
传送门 gss1 gss3 spoj gss系列=最大字段和套餐 gss1就是gss3的无单点修改版 有区间查询和单点修改,考虑用线段树维护 我们要维护区间权值和\(s\),区间最大前缀和\(xl\) ...
- 线段树 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).查询定义 ...
- SPOJ - GSS1 —— 线段树 (结点信息合并)
题目链接:https://vjudge.net/problem/SPOJ-GSS1 GSS1 - Can you answer these queries I #tree You are given ...
- SPOJ - GSS1&&GSS3
GSS1 #include<cstdio> #include<iostream> #define lc k<<1 #define rc k<<1|1 u ...
- SPOJ GSS1 & GSS3&挂了的GSS5
线段树然后yy一下,搞一搞. GSS1: 题意:求最大区间和. #include <cstdio> #include <algorithm> using namespace s ...
- SPOJ GSS1 - Can you answer these queries I(线段树维护GSS)
Can you answer these queries I SPOJ - GSS1 You are given a sequence A[1], A[2], -, A[N] . ( |A[i]| ≤ ...
随机推荐
- UI Automation
public Form1() { InitializeComponent(); this.textBox1.AccessibilityObject.Name = "t1"; thi ...
- class not found: org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
用jdk1.8版本配完SSH框架后,进行数据库的Hibernate reverse engineering后,,最下面的log.error会报错,然后看网上说是因为jdk1.8,换成了1.7就好了(剩 ...
- 动态链接库(DLL)编写经验
我首先说明DLL的生成方法,之后再补充一些特殊之处. 生成方法: 1.对需要导出的类,在头文件中添加 #ifdef CLASS _API #define CLASS_API _declspec(dll ...
- 高级设置电脑系统windows7防火墙出错代码0×6D9原因与解决技巧
高级设置windows防火墙能够更好的保护电脑系统安全,在电脑系统windows7设置过程中难免会遇到某些问题,有用户在安装MRGT后想要打开SNMP的161端口,但在打开高级安全windows防火墙 ...
- dede 你所上传的软件类型不在许可列表,请更改系统对扩展名限定的配置
后台,系统,系统基本参数,附件设置格式
- sersync+rsync同步
(一)目标服务器(rsync):10.60.50.192 1.安装rsync yum -y install rsync 2.创建rsyncd.conf配置文件 vi /etc/rsyncd.conf ...
- Linux平台ORACLE INSTANT客户端安装
下载安装文件 先去ORACLE官方网站下载所需版本的Instant Client Package 和 Instant Client Package - SQL*Plus安装包,(千万注意版本) htt ...
- Linux安装JDK、MySQL和Tomcat
1 依赖的安装 因为JDK.Tomcat和MySQL的安装过程中需要从网上下载部分支持包才可以继续,所以需要提前安装好依赖. yum install glibc.1686 yum -y install ...
- 【转】Matlab中的括号()[] {}
Matlab中经常会用到括号去引用某Array或者是cell的内容,但三者有什么具体区别呢?] []
- 【转】命令行浏览器 curl 命令详解,Linux中访问url地址
CURL --- 命令行浏览器 这东西现在已经是苹果机上内置的命令行工具之一了,可见其魅力之一斑 1)二话不说,先从这里开始吧! curl http://www.yahoo.com 回车之后,www. ...