·希望除了内部人员以外能有人通过这道题,因为这是大米饼第一次改编的题

·我所见到的“本题原版”的题解也很少,搜索一下应该是:LEIJP开船

·分析:

       简化题目,可以了解到题目要求的是:当前序列中最长的一段等差数列(当然序列存的是当前每个方块槽里的方块数量)。但是方块槽数大,操作次数多(<=500000),所以需要寻找一种美妙的数据结构来维护。区间上常用线段树,因为这道题给你的感觉是:亲切而又陌生。亲切在于它类似于以前线段树练习中求最长相同颜色子序列或者最大和连续子序列。让我们回忆一下这类型题的处理方式:用lsum[u],rsum[u],sum[u]分别表示从左起的最长序列,从右起最长序列,以及该序列的最长序列(这就是最终答案)。

      这道题的特色在于:怎样维护满足条件的区间呢?因为每次操作是给一个区间每个位置加上不相同的数,这样就没法区间操作了!就在闪亮的眼泪快要落下来的时候,你发现了一个美妙之处:等差数列的特色是公差是一个定值。你欣喜的将这个“相同的数据”拽在手里,是的如果用线段树上每一个点表示相邻方块槽的数量差值,那么如果是等差数列,拿这些点的值就是有相同的。每次你的加入操作,也可以直接加入公差b了!如一下图:

·这样做你就只需要找最长的元素相同区间(就是以前的颜色相同一段)。

怎么做?每次加入操作就向区间[l,r]统一加上b(Lazy操作等你来领取)

【哦,这个区间长度加1才是答案哦,哦,哦】

·就在你狂喜之际,你发现了一个小问题:每次操作就加公差,好像多加几次会出现神秘的误判问题,如两下图:

·问题出在哪里?首先,那个“0”是因为你做了两次区间操作,没有涉及到0右边的那个区间,所以没有加上任何公差,它处于初始化状态。正是这个原因踏实的正确答案从3卡成了6。图中的错误根源在于:最高的绿块和最矮的蓝块之间是1!它本应该是-2,但是加公差操作不能完成这个任务。

·总结地说,当前处理方式存在这样一个问题:

     在开始的思路中,我们想让数值相同的连续区间表示一个等差数列。但是只加入公差就是我们只能了解到每次插入的序列的公差,却无从了解它们a值的关系(a就是题目中所说的,可以看做是等差数列的起始项)。

·美妙的单点修改拯救世界:

    观赏下面这样一种状态(也就是输入样例):

     在黄色方块们假如以后,这明显的构成了一个跨度为5的大阶梯。比Lence的说明书上的阶梯好看多了。仔细冷静地观察现在的线段树情况:

   错误已经暴露,解决的时候到了。对于绿色部分(推广地说就是同一次加入的方块们)他们之间是”连续的”,即相邻两块之间的差值不是b就是-b。然而遭遇了黄色方块后我们不能保证黄绿交界处能否继续连续下去。处理方法是将图中线段树3位置加上一个黄色方块团的a,如果这样一加,就只有在“连续”区间时该点的值和周围的相同。类似地,在每次区间操作的末尾的后一个点减去这个槽位的方块数,可以推算出方块数为:a+(l+r-2*p)*b

如果后来的方块团要与这个团拼接成更大的阶梯,就要以自己前面单独加的数(就上上文加的a)和前面加的那个方块团末尾减去的值相互抵消,同样的道理,只有最终线段树该点的值和周围的点相同时,才可以连成阶梯。(感性地说,你可以理解为在地上挖一个坑,后来的方块来填坑)

    最后解释一下代码中的数组作用:

    lsum[u],rsum[u],sum[u]同上。lnum[u]表示当前线段树区间左端点的值,

rnum[u]表示线段树当前右端点的值(这两个的作用就是弥补只加上公差而带来的不足)。还有一个懒数组(Lazy[u])这就是懒惰操作。

     Lazy数组:你才懒,大米饼你凭什么说我懒?没有我你的区间操作就炸了!

 

 1 

当黎明和落日的光影交错的时刻,我们纷纷逃出每一座尖叫的城市。———汪峰《信仰在空中飘扬》

转载于:https://www.cnblogs.com/Paul-Guderian/p/6884477.html

【CodeVs 6128 Lence的方块们】相关推荐

  1. ●线段树题之wows

    ●模拟考试的一道似乎是学长出的题,还不错,挺考代码能力的.以此记录. ●题目以被上传(改了改说法),6128 Lence的方块们 ● (像手纸一样长的贴图--) ●题目大意: 有横向排布的n个点,每个 ...

  2. 方块游戏 (银河英雄传说)(并查集)

    方块游戏 (cubes.pas/c/cpp) [题目描述] 小A和小B在玩一个方块游戏.编号为1到n(1<=n<=30000)的n个方块正放在地上.每个构成一个立方柱. 游戏开始后,小A会 ...

  3. [ CodeVS冲杯之路 ] P1116

    不充钱,你怎么AC? 题目:http://codevs.cn/problem/1116/ 数据很小,DFS可A,每层枚举颜色,判断相邻的点是否有重复的颜色,记得回溯时把颜色染回0,即无颜色 这里我使用 ...

  4. 【贪心】【codevs】1214 线段覆盖

    http://codevs.cn/problem/1214/ 我去这个题...wa的我都没脾气了... 我写while(~scanf("%d", &n))竟然是不对的... ...

  5. [codevs 1913] 数字梯形问题

    [codevs 1913] 数字梯形问题 题解: 本题就是加强版的 [codevs 1033] 蚯蚓的游戏问题. 分别针对三个规则建图.运行最小费用最大流. 规则1:从梯形的顶至底的m条路径互不相交. ...

  6. java显示位图_java – 大图标位图在通知中显示为白色方块?

    我有这个问题,我从我在通知中使用的URL生成位图.然而,在我的手机上,Bitmap显示为一个小白色的方块.我看着它,发现很多帖子像这样说: Icon not displaying in notific ...

  7. 【UIDynamic例子】挂起的方块

    通过前面的动力学小Demo(本文默认你已经看过这篇Blog:传送门),我们对UIKit中的UIDynamic已经有了初步的认识.现在我们写个更加有趣的Demo:模拟一个用弹性绳子挂起的小方块,用户可以 ...

  8. c++输出方块_C/C++编程笔记:DFS 深度优先搜索的基本思想,含实例讲解

    采用搜索算法解决问题时,需要构造一个表明状态特征和不同状态之间关系的数据结构,这种数据结构称为结点.不同的问题需要用不同的数据结构描述. 根据搜索问题所给定的条件,从一个结点出发,可以生成一个或多个新 ...

  9. php数据库查询中文方块,解决Python数据可视化中文部分显示方块问题

    一.问题 代码如下,发现标题的中文显示的是方块 import matplotlib import matplotlib.pyplot as plt fig = plt.figure() ax = fi ...

  10. AI也能「抽象派」作画,圆形+方块组合,可微2D渲染下生成抽象人脸

    来源:机器之心 本文约2500字,建议阅读5分钟 本文介绍了AI条件下,抽象派作画. 有人将一张方块图.圆形图的组合生成了抽象的人脸!还有人将帆布油画<阿尼埃尔的浴场>还原为直线. 绘画, ...

最新文章

  1. Python 进阶_模块 包
  2. 网络编程学习笔记(readv和writev函数)
  3. VMware vSphere学习整理
  4. Java虚拟机垃圾收集器初步学习
  5. JBoss 系列五十:使用Apache httpd(mod_jk)和JBoss构架高可用集群环境
  6. spring中的IOC和AOP
  7. 怎样学习和阅读技术书籍?
  8. vsftpd安装问题汇总(持续更新。。)
  9. Win11系统如何恢复隐藏文件
  10. python tfidf特征变换_Spark MLlib机器学习开发指南(4)--特征提取--TF-IDF
  11. html自动播放auto,为移动而生的 HTML 属性autocapitalize和autocorrect
  12. 27.白纸黑点与黑纸白点
  13. C++求复数的角度_高考数学一轮复习33,复数,常见类型及解题策略
  14. Scipy教程 - python数值计算库
  15. 时间序列数据建模分析利器sktime初体验
  16. 指向类成员的指针并非指针
  17. 微信小程序——video视频播放
  18. 2019保定中考计算机时间安排,2019年保定中考考试时间安排,保定中考考试科目时间安排表...
  19. 旁路电容、滤波电容、去耦电容的作用与应用原理详解
  20. docker之SonarQube导出PDF报告

热门文章

  1. swift 笔记 (二十一) —— 高级运算符
  2. Delphi创建ActiveX控件,实现安全接口及无界面代码
  3. 支持一切积极向上的自发行为
  4. 手动解除浏览器跨域限制
  5. 使用回溯算法结合递归树+备忘录解决01背包问题
  6. SpringBoot源码篇:Spring5内置tomcat实现code-based的web.xml实现
  7. 基于python、jupyter-notebook 的金融领域用户交易行为分析
  8. java.lang.IllegalArgumentException: No enum constant org.apache.ws.commons.schema.XmlSchemaForm.
  9. 逻辑回归和线性回归区别
  10. Android - 硬件抽象层(HAL)