QOJ.ac

QOJ

Type: Editorial

Status: Open

Posted by: jiangly

Posted at: 2025-12-14 06:54:11

Last updated: 2025-12-14 06:54:15

Back to Problem

题解

线段可以直接看成矩形。

从上往下扫描线。总共的黑格数是好求的,只需要维护一下当前行有多少黑格,在每个矩形加入和删除的时候更新。

求连通块数时,首先可以将同一个矩形上的格子作为一个整体,它们一定是连通的。在加入一个矩形的时候求它上、左、右相邻的矩形然后并查集合并。求这些矩形只需要维护一下当前行存在的矩形对应的区间,然后在 set 上二分并遍历。

时间复杂度是 $O(n+(k+a)\log k)$。其中 $a$ 是相邻的矩形的对数。

可以证明 $a=O(k)$:考虑左右相邻的矩形,一个的矩形至多和四个高度更大的矩形相邻(左边两个、右边两个),上下相邻同理。

所以时间复杂度是 $O(n+k\log k)$。

Comments

No comments yet.