#P11945. [KTSC 2025] 军事基地 / safezone

    ID: 13333 远端评测题 5000ms 1024MiB 尝试: 0 已通过: 0 难度: 6 上传者: 标签>2025交互题Special JudgeKOI(韩国)

[KTSC 2025] 军事基地 / safezone

题目背景

版权信息:译自 2025年度 国际情报 올림피아드 (Olympiad) 代表学生 选拔考试 R1T4。[CC BY-NC-SA 4.0]

题目描述

平面上有 nn 个矩形。第 ii 个矩形包含的点为 {(x,y):x[Ai,Ci],y[Bi,Di]}\{(x,y):x\in [A_i,C_i], y\in [B_i,D_i]\}。(点在矩形边界上,或者在矩形内部,都算包含。)

定义两个矩形相连,当且仅当存在一个点被这两个矩形同时包含。

定义两个矩形 a,ba,b 连通,当且仅当存在一个长度为 kkk1k\ge 1)的序列 s1,s2,,sks_1,s_2,\ldots,s_ks1=a,sk=bs_1=a,s_k=b),满足 1i<k\forall 1\le i\lt k,都有 sis_isi+1s_{i+1} 相连。

定义矩形集合 SS连通分量,当且仅当:

  • i,jS\forall i,j\in S,都有 i,ji,j 连通;
  • iS,j∉S\forall i\in S,j\not\in S,都有 i,ji,j 不连通。

给定这 nn 个矩形的信息,求出所有的连通分量。

实现细节

你不需要,也不应该实现 main 函数。你的程序禁止使用 stdin / stdout

你应该实现以下的函数:

vector<int> find_union(int n, vector<int> A, vector<int> B, vector<int> C,
vector<int> D);
  • nn:矩形的个数;
  • A,B,C,DA,B,C,D:长度为 nn 的整数数组,第 ii 个矩形包含的点为 $\{(x,y):x\in [A[i-1],C[i-1]], y\in [B[i-1],D[i-1]]\}$。
  • 令连通分量的个数为 mm。你需要返回一个长度为 nn,值域为 [0,m)[0,m) 的非负整数数组 uu,满足 ui=uj    i,ju_i=u_j\iff i,j 在一个连通分量内。

输入格式

Sample Grader 输入格式如下:

第一行,正整数 nn

接下来 nn 行,第 ii 行四个整数 Ai,Bi,Ci,DiA_{i},B_{i},C_{i},D_{i}

输出格式

Sample Grader 输出格式如下:

输出 nn 个非负整数 u0,u1,,un1u_0,u_1,\ldots,u_{n-1}

3
0 0 1 1
1 1 2 2
2 -1 4 0
0 0 1

2
0 1 3 3
2 0 4 2
0 0

提示

样例交互

样例交互 11

样例 11 中,$n = 3, A = [0, 1, 2], B = [0, 1, −1], C = [1, 2, 4], D = [1, 2, 0]$。

交互库调用

find_union(3, {0, 1, 2}, {0, 1, -1}, {1, 2, 4}, {1, 2, 0});

对应的矩形如图所示。

由于 (1,1)(1,1) 同时被矩形 1,21,2 包含,所以矩形 1,21,2 连通。

返回 [0,0,1][0,0,1]。返回 [1,1,0][1,1,0] 也是正确的。

样例交互 22

样例 22 中,$n = 2, A = [0, 2], B = [1, 0], C = [3, 4], D = [3, 2]$。

交互库调用

find_union(2, {0, 2}, {1, 0}, {3, 4}, {3, 2});

对应的矩形如图所示。

显然只有唯一的一个返回值 [0,0][0,0]

数据范围

  • 1n5×1051\le n\le 5\times 10^5
  • 109Ai,Bi,Ci,Di109-10^9\le A_i,B_i,C_i,D_i\le 10^9
  • AiCiA_i\le C_iBiDiB_i\le D_i

子任务

  • Subtask 0 (0 pts)\text{Subtask 0 (0 pts)}:样例。
  • Subtask 1 (3 pts)\text{Subtask 1 (3 pts)}0in1\forall 0\le i\le n-1A[i]iC[i],B[i]0D[i]A[i] \le i \le C[i], B[i] \le 0 \le D[i]
  • Subtask 2 (4 pts)\text{Subtask 2 (4 pts)}0in1\forall 0\le i\le n-1B[i]0D[i]B[i] \le 0 \le D[i]
  • Subtask 3 (7 pts)\text{Subtask 3 (7 pts)}n5×103n\le 5\times 10^3
  • Subtask 4 (21 pts)\text{Subtask 4 (21 pts)}Ai=CiA_i=C_iBi=DiB_i=D_i 至少有一个成立。
  • Subtask 5 (26 pts)\text{Subtask 5 (26 pts)}n105n\le 10^5
  • Subtask 6 (39 pts)\text{Subtask 6 (39 pts)}:无额外约束。