【CodeVs 6128 Lence的方块们】

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

·我所见到的“本题原版”的题解也很少,搜索一下应该是: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

如果后来的方块团要与这个团拼接成更大的阶梯

时间: 2024-10-09 21:59:14

【CodeVs 6128 Lence的方块们】的相关文章

2016. 4.10 NOI codevs 动态规划练习

1.codevs1040 统计单词个数 1040 统计单词个数 2001年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个).要求将此字母串分成k份(1<k<=40),且每份中包含的单词个数加起来总数最大(每份中包含的单词可以部分重叠.当选用一个单词之后,其第一个字母不能再用.例如字符串t

[ CodeVS冲杯之路 ] P2492

不充钱,你怎么AC? 题目:http://codevs.cn/problem/2492/ 在此先orz小胖子,教我怎么路径压缩链表,那么这样就可以在任意节点跳进链表啦(手动@LCF) 对于查询操作,直接树状数组(以下简称BIT)维护,修改操作就一个个暴力开方搞,再用差值单点更新BIT 不过这样会TLE,要加一点优化对不对,正如开头所说的路径压缩链表 路径压缩链表其实就是个并查集,在普通的链表里,删去两个连续的节点后会是下面这种情况,如删去2,3 当访问 2 的时候,会跳到3,但 3 已经删除了,

[CODEVS 1281] Xn数列

描述 给你6个数,m, a, c, x0, n, g Xn+1 = ( aXn + c ) mod m,求Xn http://codevs.cn/problem/1281/ 分析 比较裸的矩阵乘法题, 好久没做了, 写写思路 假设矩阵 A = { {a1, a2}, {a3, a4} }, B = { {b1, b2}, {b3, b4} }. 根据矩阵乘法的计算方法, 有 : A×B = { {a1b1+a2b2, a1b2+a2b4}, {a3b1+a4b3, a3b2+a4b4} }. 那

Codevs 1257 打砖块

1257 打砖块 http://codevs.cn/problem/1257/ 题目描述 Description 在一个凹槽中放置了n层砖块,最上面的一层有n块砖,第二层有n-1块,……最下面一层仅有一块砖.第i层的砖块从左至右编号为1,2,……i,第i层的第j块砖有一个价值a[i,j](a[i,j]<=50).下面是一个有5层砖块的例子.如果你要敲掉第i层的第j块砖的话,若i=1,你可以直接敲掉它,若i>1,则你必须先敲掉第i-1层的第j和第j+1块砖. 你的任务是从一个有n(n<=5

codevs——T1219 骑士游历

 http://codevs.cn/problem/1219/ 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 设有一个n*m的棋盘(2≤n≤50,2≤m≤50),如下图,在棋盘上有一个中国象棋马. 规定: 1)马只能走日字 2)马只能向右跳 问给定起点x1,y1和终点x2,y2,求出马从x1,y1出发到x2,y2的合法路径条数. 输入描述 Input Description 第一行2个整数n和m 第二行4个

【codevs 1911 孤岛营救问题】

·为了分析方便,可以先做一个题目简化.去掉"钥匙"这个条件,那么就是一个BFS或者SPFA--现在加上该条件.如本题只给出最多两种钥匙,当然你可以继续坚持BFS等方式,时间不会太差.但是一旦钥匙种类上升至15的时候,就有太多情况需要处理(光说你写BFS的if就是很长的过程,但个人认为时间复杂度依旧能过这道题). ·如图是简化版本的决策方式(为与后文呼应,用SPFA): 大方块是整个地图.小方块是一个房间.那么你可以在向四个方向走,前提是有路可走(没有墙).你本可以轻松拯救大兵瑞恩,然后

1683 车厢重组 codevs

http://codevs.cn/problem/1683/ 时间限制: 1 s 空间限制: 1000 KB 题目等级 : 白银 Silver 题目描述 Description 在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转.一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转180度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序.于是他就负责用这座桥将进站的车厢按车厢号从小到大排列.他退休后,火车站决定将这一工作自动化,其中一项重要的工作是编一个程序

codevs 1487 大批整数排序(水题日常)

时间限制: 3 s 空间限制: 16000 KB 题目等级 : 黄金 Gold 题目描述 Description !!!CodeVS开发者有话说: codevs自从换了评测机,新评测机的内存计算机制发生变化 计算内存的时候会包括栈空间 swap空间 这题的2M是单指内存空间... 十分十分抱歉 抱歉 !!! 现在有一大批(总数不超过10000000个)1到10之间的整数,现在请你从小到大进行排序输出. (测试数据将超过11MB.) 输入描述 Input Description 第一行表示将下排序

codevs 3342 绿色通道 (二分+线性DP)

codevs 3342 绿色通道 http://codevs.cn/problem/3342/ 难度等级:黄金 题目描述 Description <思远高考绿色通道>(Green Passage, GP)是唐山一中常用的练习册之一,其题量之大深受lsz等许多oiers的痛恨,其中又以数学绿色通道为最.2007年某月某日,soon-if (数学课代表),又一次宣布收这本作业,而lsz还一点也没有写…… 高二数学<绿色通道>总共有n道题目要写(其实是抄),编号1..n,抄每道题所花时间