题目链接:点击查看
题目大意:给出一个长度为 n ,初始时全部为 0 的数组 a ,后续进行 n 次操作,每次操作找到最长的连续 0 ,如果有多个则选择位置最靠左边的,将这组连续 0 的,最中间位置的数赋值为 i ,i 为第 i 次操作,输出最后的数列
题目分析:一开始没什么思路,用线段树区间合并暴力模拟的,果不其然 TLE 了,其实自己手算模拟几次就会发现,每个位置至多会被遍历到一次,且是按照深度扩展的,所以我们可以用 bfs + 优先队列 不断扩展就好了,具体实现可以看代码
代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include