描述

http://www.lydsy.com/JudgeOnline/problem.php?id=1012


分析


  • 维护后缀最大值
    类似暴力的求解, A数组记录数值, maxv记录从当前位置向后的最大值. 每次采用从后向前的方式维护maxv数组, 如果遇到一个不需要更改的值, 也就是说新加入的元素对这个位置的maxv的值无影响, 就可以跳出循环, 因为新加入的元素对这个位置前面的值也一定没有影响, 这是本算法里的一个最重要的优化. 不过我仍认为这个算法能过只是数据不太给力, 本质上还是O(n2)的算法吧.

  • 单调栈
    单调栈的做法又有两种, 一种采用 STL 算法库模板里 lower_bound 二分加速查找同时简化代码, 另一种采用并查集.

    第一种, 建立单调递减栈, 并不是说栈里的元素是递减的, 我们在栈里存的是数组元素的下标, 要让下标所代表的元素值严格单调递减. 每次遇到 A 操作就尝试在栈中插入新的元素的位置下标, 注意一定要把新的元素插入无论栈最后还剩几个元素. 遇到 Q 操作就在栈中二分查找第一个大于或等于查询的位置的元素. 因为栈里元素所对应数组元素是递减的, 所以该元素所对应数组元素是它及它之后最大的, 也就是我们所寻找的.

    第二种, 同样建立单调递减栈, 意义和上面的相同. 采用并查集, 其中 p[x] = y, 表示以 x 为下标所代表的数组元素比以 y 为下标所代表的数组元素大, 最终的 p[x] 就是 x 向后的最大元素的数组下标了, 用并查集可以很方便地查出.


  • 线段树
    就是普通的单点修改, 区间查询最大值.

  • 树状数组
    同上.

小结

这是一个有多种解法的题, 各种解法复杂度不同, 编程难度也不同. 这里主要说了比较新颖的两类解法, 而且编写的难度很小, 注意一下细节就可以了. 平时要多注意这种用简单数据结构就能 AC 的解法, 试着发散性思考.


代码


维护后缀最大值 :
https://code.csdn.net/snippets/607398


单调栈-lower_bound二分 :
https://code.csdn.net/snippets/607393


单调栈-并查集 :
https://code.csdn.net/snippets/607395

[BZOJ 1012] 最大数maxnumber相关推荐

  1. Luogu P1198 BZOJ 1012 最大数 (线段树)

    Luogu P1198 BZOJ 1012 最大数 (线段树) 手动博客搬家: 本文发表于20170821 14:32:05, 原地址https://blog.csdn.net/suncongbo/a ...

  2. BZOJ 1012 最大数

    Description 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作.语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值.限制:L不超过当前数列的长度. 2. ...

  3. BZOJ 1012: [JSOI2008]最大数maxnumber 单调队列/线段树/树状数组/乱搞

    1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MB Submit: 4750  Solved: 2145 [Sub ...

  4. BZOJ 1012: [JSOI2008]最大数maxnumber

    1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MB Submit: 11358  Solved: 4978 [Su ...

  5. BZOJ 1012: [JSOI2008]最大数maxnumber(线段树)

    裸的线段树...因为数组开小了而一直RE..浪费了好多时间.. -------------------------------------------------------------------- ...

  6. BZOJ 1012 [JSOI2008]最大数maxnumber

    1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MB Submit: 5425  Solved: 2397 [Sub ...

  7. [BZOJ 1012] [JSOI 2008] 最大数maxnumber

    1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MB Submit: 5094  Solved: 2276 [Sub ...

  8. 【BZOJ 1012】[JSOI2008]最大数maxnumber

    1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MB Description 现在请求你维护一个数列,要求提供以下两种 ...

  9. 1012: [JSOI2008]最大数maxnumber

    1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MB Submit: 10711  Solved: 4683 [Su ...

最新文章

  1. Spring源码学习笔记1
  2. php展开收缩bom表_WordPress实现文章内容收缩和展开功能
  3. xcode5 中Provisioning Profiles列表清理方法
  4. Zookeeper_原生API操作(一)
  5. VisualStudioAddIn2017.vsix的下载安装和使用
  6. 过去式加ed的发音_【思语小课堂】时态二三事:规则动词过去式的发音规则
  7. 关于我的文章说明及联系方式
  8. 论文|Airbnb Embedding的实践和思考
  9. cas云计算机管理平台添加加密锁,CAS云计算管理平台安装手册.docx
  10. 解决mysql客户端中文显示乱码
  11. 如何在手机上查看APP原型
  12. java房屋租赁系统源码,基于jsp+mysql+Spring开发,免费分享
  13. 数值分析常见基本算法及MATLAB代码总结
  14. 新开的淘宝店铺如何运营与推广
  15. 视频号哪些领域值得做变现机会更大:国仁楠哥
  16. 华为手机卡在升级界面_华为手机停在开机画面的解决方法【图文教程】
  17. 微服务架构与开源框架
  18. 判断是否为平衡二叉树(Java)
  19. 子类方法中super.父类方法
  20. c语言单目运算符和三目,6、单目运算符 双目运算符 三目运算符() 及 优先级的探讨!...

热门文章

  1. [云炬创业管理笔记]第九章为创业成败而准备测试1
  2. [云炬创业基础笔记]第九章企业的法律形态测试8
  3. windows系统安装python模块
  4. 最大期望算法与混合高斯模型的推导
  5. Matlab神经网络十讲(7): Adaptive Filter and Adaptive Training
  6. VTK修炼之道56:图形基本操作进阶_表面重建技术(三维点云曲面重建)
  7. VTK修炼之道53:图形基本操作进阶_多分辨率策略(模型细化的三种方法)
  8. 关于NHibernate
  9. 设计一个函数能够取出字符串中指定的字符
  10. LGB + KFold 代码 (1)