于是我拿合并返回节点的线段树(我也不知道应该叫什么名)水了一下$GSS1$

比$NOIp$之前写的不知道高到哪里去了,并且只用了$\frac{1}{3}$的时间

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <cstring>
  5. #define lc x<<1
  6. #define rc x<<1|1
  7. #define mid ((l+r)>>1)
  8. #define lson x<<1,l,mid
  9. #define rson x<<1|1,mid+1,r
  10. using namespace std;
  11. typedef long long ll;
  12. const int N=5e5+;
  13. inline int read(){
  14. char c=getchar();int x=,f=;
  15. while(c<''||c>''){if(c=='-')f=-;c=getchar();}
  16. while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
  17. return x*f;
  18. }
  19. int n,Q,a,b;
  20. struct Node{
  21. int sum,mx,lm,rm;
  22. Node():sum(),mx(),lm(),rm(){}
  23. }t[N<<];
  24. Node Merge(Node a,Node b){
  25. Node re;
  26. re.sum=a.sum+b.sum;
  27. re.mx=max(a.rm+b.lm,max(a.mx,b.mx));
  28. re.lm=max(a.lm,a.sum+b.lm);
  29. re.rm=max(b.rm,b.sum+a.rm);
  30. return re;
  31. }
  32. void merge(int x){
  33. t[x].sum=t[lc].sum+t[rc].sum;
  34. t[x].mx=max(t[lc].rm+t[rc].lm,max(t[lc].mx,t[rc].mx));
  35. t[x].lm=max(t[lc].lm,t[lc].sum+t[rc].lm);
  36. t[x].rm=max(t[rc].rm,t[rc].sum+t[lc].rm);
  37. }
  38. void build(int x,int l,int r){
  39. if(l==r) t[x].sum=t[x].mx=t[x].lm=t[x].rm=read();
  40. else{
  41. build(lson);
  42. build(rson);
  43. merge(x);
  44. }
  45. }
  46. Node segQue(int x,int l,int r,int ql,int qr){
  47. if(ql<=l&&r<=qr) return t[x];
  48. else{
  49. if(qr<=mid) return segQue(lson,ql,qr);
  50. if(mid<ql) return segQue(rson,ql,qr);
  51. return Merge(segQue(lson,ql,qr),segQue(rson,ql,qr));
  52. }
  53. }
  54. int main(){
  55. freopen("in","r",stdin);
  56. n=read();
  57. build(,,n);
  58. Q=read();
  59. for(int i=;i<=Q;i++) a=read(),b=read(),printf("%d\n",segQue(,,n,a,b).mx);
  60. }

GSS1的更多相关文章

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

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

  2. GSS3 SPOJ 1716. Can you answer these queries III gss1的变形

    gss2调了一下午,至今还在wa... 我的做法是:对于询问按右区间排序,利用splay记录最右的位置.对于重复出现的,在splay中删掉之前出现的位置所在的节点,然后在splay中插入新的节点.对于 ...

  3. SPOJ GSS1 && GSS3 (无更新/更新单点,并询问区间最大连续和)

    http://www.spoj.com/problems/GSS1/ 题意:无更新询问区间最大连续和. 做法:线段树每个节点维护sum[rt],maxsum[rt],lsum[rt],rsum[rt] ...

  4. spoj gss1 gss3

    传送门 gss1 gss3 spoj gss系列=最大字段和套餐 gss1就是gss3的无单点修改版 有区间查询和单点修改,考虑用线段树维护 我们要维护区间权值和\(s\),区间最大前缀和\(xl\) ...

  5. 线段树 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).查询定义 ...

  6. SPOJ - GSS1 —— 线段树 (结点信息合并)

    题目链接:https://vjudge.net/problem/SPOJ-GSS1 GSS1 - Can you answer these queries I #tree You are given ...

  7. SPOJ - GSS1&&GSS3

    GSS1 #include<cstdio> #include<iostream> #define lc k<<1 #define rc k<<1|1 u ...

  8. SPOJ GSS1 & GSS3&挂了的GSS5

    线段树然后yy一下,搞一搞. GSS1: 题意:求最大区间和. #include <cstdio> #include <algorithm> using namespace s ...

  9. 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]| ≤ ...

随机推荐

  1. UI Automation

    public Form1() { InitializeComponent(); this.textBox1.AccessibilityObject.Name = "t1"; thi ...

  2. class not found: org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

    用jdk1.8版本配完SSH框架后,进行数据库的Hibernate reverse engineering后,,最下面的log.error会报错,然后看网上说是因为jdk1.8,换成了1.7就好了(剩 ...

  3. 动态链接库(DLL)编写经验

    我首先说明DLL的生成方法,之后再补充一些特殊之处. 生成方法: 1.对需要导出的类,在头文件中添加 #ifdef CLASS _API #define CLASS_API _declspec(dll ...

  4. 高级设置电脑系统windows7防火墙出错代码0×6D9原因与解决技巧

    高级设置windows防火墙能够更好的保护电脑系统安全,在电脑系统windows7设置过程中难免会遇到某些问题,有用户在安装MRGT后想要打开SNMP的161端口,但在打开高级安全windows防火墙 ...

  5. dede 你所上传的软件类型不在许可列表,请更改系统对扩展名限定的配置

    后台,系统,系统基本参数,附件设置格式

  6. sersync+rsync同步

    (一)目标服务器(rsync):10.60.50.192 1.安装rsync yum -y install rsync 2.创建rsyncd.conf配置文件 vi /etc/rsyncd.conf ...

  7. Linux平台ORACLE INSTANT客户端安装

    下载安装文件 先去ORACLE官方网站下载所需版本的Instant Client Package 和 Instant Client Package - SQL*Plus安装包,(千万注意版本) htt ...

  8. Linux安装JDK、MySQL和Tomcat

    1 依赖的安装 因为JDK.Tomcat和MySQL的安装过程中需要从网上下载部分支持包才可以继续,所以需要提前安装好依赖. yum install glibc.1686 yum -y install ...

  9. 【转】Matlab中的括号()[] {}

    Matlab中经常会用到括号去引用某Array或者是cell的内容,但三者有什么具体区别呢?] []

  10. 【转】命令行浏览器 curl 命令详解,Linux中访问url地址

    CURL --- 命令行浏览器 这东西现在已经是苹果机上内置的命令行工具之一了,可见其魅力之一斑 1)二话不说,先从这里开始吧! curl http://www.yahoo.com 回车之后,www. ...