题目链接:P1115 最大子段和

告诉你,这个我调了一天的题是橙题......

线性容易得到,放篇题解:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main()
  4. {
  5. int n[200001],p,ans[200001]={0};
  6. int sum=-9999999;//|x|<=10000 QWQ
  7. cin>>p;
  8. for(int i=1;i<=p;i++)
  9. {
  10. cin>>n[i];//输入
  11. ans[i]=max(ans[i-1]+n[i],n[i]);//DP
  12. sum=max(sum,ans[i]);//取最大值也同时进行,节约时间
  13. }
  14. cout<<sum;//直接输出
  15. return 0;
  16. }

可我想到一道紫题,这样做沦为\(O(n^2)\),那我们如何维护任意区间的最大子段和,可以用线段树维护,开始想了个\(O(n^2logn)\),显然是假的,然后学了下,又出了些\(SB\)错误,终于\(AC\)了。

\(Code\):

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cmath>
  4. using namespace std;
  5. const int MAXN=200005;
  6. int t[MAXN],n;
  7. struct seg_t
  8. {
  9. int l,r,sum,pre,suf,maxn;
  10. seg_t()
  11. {
  12. l=r=sum=pre=suf=maxn=0;
  13. }
  14. }a[MAXN<<2];
  15. void update(int k)
  16. {
  17. a[k].pre=max(a[k<<1].pre,a[k<<1].sum+a[k<<1|1].pre);
  18. a[k].suf=max(a[k<<1|1].suf,a[k<<1|1].sum+a[k<<1].suf);
  19. a[k].maxn=max(max(a[k<<1].maxn,a[k<<1|1].maxn),a[k<<1].suf+a[k<<1|1].pre);
  20. a[k].sum=a[k<<1].sum+a[k<<1|1].sum;
  21. }
  22. void build(int k,int l,int r)
  23. {
  24. a[k].l=l,a[k].r=r;
  25. if(l==r)
  26. {
  27. a[k].maxn=a[k].sum=a[k].suf=a[k].pre=t[l];
  28. return;
  29. }
  30. int mid=(l+r)>>1;
  31. build(k<<1,l,mid),build(k<<1|1,mid+1,r);
  32. update(k);
  33. }
  34. seg_t query(int k,int l,int r)
  35. {
  36. int mid=(a[k].l+a[k].r)>>1;
  37. if(a[k].l==l&&a[k].r==r) return a[k];
  38. if(r<=mid) return query(k<<1,l,r);
  39. else if(l>=mid+1) return query(k<<1|1,l,r);
  40. else
  41. {
  42. seg_t ll,rr,ans;
  43. ll=query(k<<1,l,mid),rr=query(k<<1|1,mid+1,r);
  44. ans.sum=ll.sum+rr.sum;
  45. ans.maxn=max(ll.maxn,rr.maxn);
  46. ans.pre=max(ll.pre,ll.sum+rr.pre);
  47. ans.suf=max(rr.suf,rr.sum+ll.suf);
  48. ans.maxn=max(ans.maxn,ll.suf+rr.pre);
  49. return ans;
  50. }
  51. }
  52. int main()
  53. {
  54. scanf("%d",&n);
  55. for(int i=1;i<=n;i++) scanf("%d",&t[i]);
  56. build(1,1,n);
  57. printf("%d\n",query(1,1,n).maxn);
  58. return 0;
  59. }

这种线段树咱真没见过

解题报告:luogu P1115(模板 最大子段和)的更多相关文章

  1. LeetCode 新题: Find Minimum in Rotated Sorted Array 解题报告-二分法模板解法

    Find Minimum in Rotated Sorted Array Question Solution Suppose a sorted array is rotated at some piv ...

  2. 习题:codevs 1519 过路费 解题报告

    今天拿了这道题目练练手,感觉自己代码能力又增强了不少: 我的思路跟别人可能不一样. 首先我们很容易就能看出,我们需要的边就是最小生成树算法kruskal算法求出来的边,其余的边都可以删掉,于是就有了这 ...

  3. 【NOIP2015】提高day2解题报告

    题目: P1981跳石头 描述 一年一度的“跳石头”比赛又要开始了!这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之间,有 N ...

  4. 2011 ACM-ICPC 成都赛区解题报告(转)

    2011 ACM-ICPC 成都赛区解题报告 首先对F题出了陈题表示万分抱歉,我们都没注意到在2009哈尔滨赛区曾出过一模一样的题.其他的话,这套题还是非常不错的,除C之外的9道题都有队伍AC,最终冠 ...

  5. 【百度之星2014~初赛(第二轮)解题报告】JZP Set

    声明 笔者近期意外的发现 笔者的个人站点http://tiankonguse.com/ 的非常多文章被其他站点转载,可是转载时未声明文章来源或參考自 http://tiankonguse.com/ 站 ...

  6. LeetCode: Combination Sum 解题报告

    Combination Sum Combination Sum Total Accepted: 25850 Total Submissions: 96391 My Submissions Questi ...

  7. ACM-ICPC 2017 Asia HongKong 解题报告

    ACM-ICPC 2017 Asia HongKong 解题报告 任意门:https://nanti.jisuanke.com/?kw=ACM-ICPC%202017%20Asia%20HongKon ...

  8. 【解题报告】洛谷 P2571 [SCOI2010]传送带

    [解题报告]洛谷 P2571 [SCOI2010]传送带今天无聊,很久没有做过题目了,但是又不想做什么太难的题目,所以就用洛谷随机跳题,跳到了一道题目,感觉好像不是太难. [CSDN链接](https ...

  9. NOIP 2018 普及组 解题报告

    目录 标题统计 题目链接 思路 代码 龙虎斗 题目链接: 思路 代码 摆渡车 题目链接: 思路 对称二叉树 题目链接 思路: 先来解释一下为毛现在才来发解题报告: 其实博主是参加过NOIP 2018普 ...

随机推荐

  1. 《Web安全攻防 渗透测试实战指南 》 学习笔记 (五)

    Web安全攻防 渗透测试实战指南   学习笔记 (五)   第四章 Web安全原理解析  (一) (一)SQL注入的原理 1.web应用程序对用户输入数据的合法性没有判断. 2.参数用户可控:前端传给 ...

  2. centosflask+uWSGI+nginx部署

    centosflask+uWSGI+nginx部署 1.      概念 Flask自带webserver--Werkzeug,可以搭建服务,运行网站.但在开发时,一般会用专业的--uWSGI. 另外 ...

  3. Intellij IDEA中创建Package变成一级目录

    1.创建包,但是出来的却是一级目录 2.因为Compact Middle Packages默认勾选上了,取消掉即可

  4. DDL与DML的区别

    DML(Data Manipulation Language)数据操纵语言: 适用范围:对数据库中的数据进行一些简单操作,如insert,delete,update,select等. DDL(Data ...

  5. shell 脚本基础

    弱类型语言 bash 变量类型 本地变量 环境变量 局部变量 位置参数变量 特殊变量 运行 无执行权限 bash hello.sh 有执行权限 检查语法 bash -n user.sh 跟踪每一行的执 ...

  6. java中关于类和对象的一些思考

    就这个问题而言 第一种和第二种定义的变量并不是一种形式 前者我们称为原始数据变量 后者我们称为对象变量 这两种变量的创建方式,定义方式,使用方式都有着很多不同 需要引起注意. 在java中,有着基本的 ...

  7. oracle误操作表数据--回退(闪回)被提交后的数据

    // 查询该时间段 这个表的状态 (就是表状态正常的时刻 下面的时间仅用于举例) select * from 表名 as of timestamp to_timestamp('2019-09-26 1 ...

  8. 关于cmd的命令行参数的问题

    最近学习Java了解到发现需要配置环境变量其中Path需要更改为 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; 而这样的行为无意间导致了win中cmd的一些参数无法使用,比 ...

  9. 基于three.js实现特定Div容器的粒子特效封装

    本文基于three.js实现特定容器的粒子特效效果,支持用户传入特定的dom对象以及粒子颜色. 效果图 移入库 <script src="jquery-1.11.3.min.js&qu ...

  10. swiper选项卡还可以左右滑动,最后一个直接跳转链接

    整理分享: <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf ...