分块

  • 问题引入:

对一个非负整数序列A,在有可能随时添加或删除元素的情况下,实时查询序列元素第K大,即把序列元素从小到大排序后从左到右的第K个元素

直接查询,在添加跟删除元素的时候O(N)时间复杂度来移动序列元素。


  • 分块:

对于一个有N个元素的有序序列来说,除最后一块外,其余每块中元素的个数都应当为根号N向下取整,于是块数为根号N向上取整

1.int table[MAX],表示当前整数x的当前存在个数
2.int block[SQR],表示第i块中存在的元素个数

添加或删除:对应的table和block都++或都--

查询:先用找第K大的元素在哪一块,然后在块内找这个元素,因此单次查询的总时间复杂度为O(根号N)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容