B-GT‘s Dream “科林明伦杯“哈尔滨理工大学第八届程序设计竞赛
题目链接
GT’s Dream
题解
思路
两个操作,对于第一个操作——合并,需要使用并查集;对于第二个操作——查询,使用树状数组。
我们使用树状数组维护一个前缀和。数组下标表示人数,元素表示在树状数组的意义下(其本质并非前缀和),小于等于该人数的帮派个数。
当我们需要查询第k个帮派的人数时,利用树状数组求和函数sum,二分地在树状数组中查询。查询的初始区间为[1, n]。若求和函数的返回值大于等于k,则说明应该在[l, mid]中查询,否则应在[mid, r]中查询。由于这样的查询结果是第k小的帮派人数(
原创
2020-11-01 12:03:04 ·
175 阅读 ·
0 评论