随笔分类 -  实用算法——分块

摘要:先说正解:把所有相同的数相成一个链在每一个区间里的种数就是不同链的链头,那么记录每个数的上个相同数所在位置,那么只要找出l到r之间前驱值在l之前的数的个数就可以了 本人打的暴力,有一个小技巧,用char代替int水题,用int里的值不同来去掉memset 阅读全文
posted @ 2017-06-15 11:07 TS_Hugh 阅读(226) 评论(0) 推荐(0)
摘要:修改:两边暴力重构,中间打标记。复杂度:O(n0.5) 查询:中间二分两边暴力。O(n0.5logn0.5) 总时间复杂度O(n*n0.5logn0.5) 空间复杂度是n级别的 标记不用下传因为标记不用下传也没时间下传,如果在访问时下传就造成更棘手的不整块,如果累加式下传不好记录,所以就带着就行。 阅读全文
posted @ 2017-06-14 11:01 TS_Hugh 阅读(223) 评论(0) 推荐(0)
摘要:这个题体现了分块不只是最大值最小值众数次数,而是一种清真的思想。 我们把整个序列分块,在每个块里处理每个位置跳出这个块的次数和跳出的位置,那么每次修改n0.5,每次查询也是,那么O(m* n0.5)的复杂度是可以的. 阅读全文
posted @ 2017-06-14 08:46 TS_Hugh 阅读(239) 评论(0) 推荐(0)
摘要:这个,要处理各个数的话得先离散,我用的桶。 我们先把每个块里的和每个块区间的众数找出来,那么在查询的时候,可能成为[l,r]区间的众数的数只有中间区间的众数和两边的数。 证明:若不是这里的数连区间的众数都达不到。 我已开始把某个离散后的值当成了坐标,调了好久....... 阅读全文
posted @ 2017-06-14 07:35 TS_Hugh 阅读(374) 评论(0) 推荐(0)