随笔分类 -  数据结构——分块

摘要:题意:给出区间内的最小众数 思路:分块,离散化每个数,开vector记录每个数p出现的位置,这样就能二分出L,R以内p的个数了。众数有一个性质,用mode(a)表示集合a的众数,那么mode(a∪b) ∈ mode(a)∪b 。那么我先预处理出任意两块的众数f[i][j],这样众数就是f[i][j] 阅读全文
posted @ 2019-05-23 21:17 KirinSB 阅读(335) 评论(0) 推荐(0) 编辑
摘要:题意:区间加,区间乘,单点询问 思路:假设一个点为a,那么他可以表示为m * a + sum,所以区间加就变为m * a + sum + sum2,区间乘变为m * m2 * a + sum * m2。左右两边的块要先puhs down。 代码: 阅读全文
posted @ 2019-05-22 13:25 KirinSB 阅读(292) 评论(0) 推荐(0) 编辑
摘要:题意:给n个数,可以进行两种操作:给区间[l,r]每个数开方向下取整;算区间[l,r]的和。 思路:我们可以知道,一个数一直开方下去,就会变成0或者1,然后就不会变了。那么当一个区间只剩0或1时,就不用进行操作了。那么直接分块,然后搞一个flag判断一下是否变成0。稍微优化一下。 代码: 阅读全文
posted @ 2019-05-22 00:10 KirinSB 阅读(286) 评论(0) 推荐(0) 编辑
摘要:题意:给出几个操作,把l-r赋值为z,询问l-r有几个z,其中z < INT_MAX 思路:因为z很大,所以很难直接用线段树去维护。这里可以使用分块来解决。我们可以让每个块用map去储存map[i]的个数,用类似线段树的lazy标记来给整个块更新,当需要对块内某些数操作时再pushdown。 注意一 阅读全文
posted @ 2019-03-21 21:09 KirinSB 阅读(212) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示