CF1980F2.Field Division (hard version)
提高+/省选-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
这是该问题的困难版本;它与简单版本的区别仅在于问题本身。简单版本只需要你判断某些值是否为非零,而困难版本需要你输出确切的数值。
Alice 和 Bob 正在分割一块田地。这块田地是一个 n×m 的矩形(2≤n,m≤109);行从上到下编号为 1 到 n,列从左到右编号为 1 到 m。第 r 行第 c 列的格子记作 (r,c)。
Bob 有 k 个喷泉(2≤k≤2⋅105),所有喷泉都位于不同的格子中。Alice 负责分割田地,但她必须满足以下条件:
- 为了分割田地,Alice 会从左侧或上侧任意一个没有喷泉的格子出发,每次只能向下或向右移动到相邻的格子。她的路径会在右侧或下侧的某个格子结束。
- Alice 的路径会把田地分成两部分——一部分归 Alice 所有(包括她路径上的所有格子),另一部分归 Bob 所有。
- Alice 拥有包含格子 (n,1) 的那一部分。
- Bob 拥有包含格子 (1,m) 的那一部分。
Alice 希望分割田地,使她获得的格子数尽可能多。
Bob 希望保留所有喷泉,但他可以把其中一个喷泉让给 Alice。首先,输出整数 α——在 Bob 不让出任何喷泉(即所有喷泉都归 Bob 所有)的情况下,Alice 能获得的最大格子数。
然后输出 k 个非负整数 a1,a2,…,ak,其中 ai 表示如果 Bob 把第 i 个喷泉让给 Alice 后,Alice 能获得的最大格子数为 α+ai。
输入格式
第一行包含一个整数 t(1≤t≤104)——表示测试用例的数量。
每个测试用例的第一行包含三个整数 n、m 和 k(2≤n,m≤109,2≤k≤2⋅105)——田地的大小和喷泉的数量。
接下来 k 行,每行包含两个整数 ri 和 ci(1≤ri≤n,1≤ci≤m)——第 i 个喷泉所在格子的坐标。保证所有格子互不相同,且没有喷泉位于 (n,1)。
保证所有测试用例中 k 的总和不超过 2⋅105。
输出格式
对于每个测试用例,首先输出一个整数 α,表示在 Bob 不让出任何喷泉的情况下,Alice 能获得的最大格子数。然后输出 k 个非负整数 a1,a2,…,ak,其中 ai 表示如果 Bob 把第 i 个喷泉让给 Alice 后,Alice 能获得的最大格子数为 α+ai。
输入输出样例
输入#1
5 2 2 3 1 1 1 2 2 2 5 5 4 1 2 2 2 3 4 4 3 2 5 9 1 2 1 5 1 1 2 2 2 4 2 5 1 4 2 3 1 3 6 4 4 6 2 1 3 1 4 1 2 3 4 5 2 1 3 2 1 4 1 3 2 4
输出#1
1 1 0 1 11 0 1 0 4 1 0 0 1 1 0 0 0 0 0 6 15 0 0 0 1 2 3 0 0 0
说明/提示
以下是第二个样例的图片说明:

喷泉的编号用绿色标注。属于 Alice 的格子用蓝色标注。注意,如果 Bob 把喷泉 1 或喷泉 3 让给 Alice,那么这些喷泉不能出现在 Alice 的区域中。
由 ChatGPT 4.1 翻译
输入解题思路,AI测评打分。不知道怎么写?