CF2053D.Refined Product Optimality

普及+/提高

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

作为测试者,当我的解答在测试时与样例输出不一致时,我首先会怀疑出题人。

—— Chris,一条评论

虽然 Iris 偶尔会出一些解答可能有误的题目,但她仍坚持用自己的想象力创造题目;毕竟,每个人都在用自己的固执走在路上……就像以往一样,Iris 又出了一道题,并且给出了一个错误的解答,但 Chris 总是要来拯救它!现在你要扮演 Chris 的角色:

  • Chris 得到两个长度为 nn 的整数数组 aa 和 bb。
  • Iris 对 bb 进行任意重排后,关注 P=∏i=1nmin⁡(ai,bi)P = \prod\limits_{i=1}^n \min(a_i, b_i) 的最大可能取值。注意,她只关心 PP 的最大值,并不会真的重排 bb。
  • 接下来会有 qq 次修改。每次修改由两个整数 oo 和 xx 表示(oo 只能为 11 或 22,1≤x≤n1 \leq x \leq n)。如果 o=1o=1,则将 axa_x 增加 11;否则,将 bxb_x 增加 11。
  • Iris 会在 q+1q+1 个时刻询问 Chris PP 的最大值:第一次是在所有修改之前,之后每次修改后都要询问一次。
  • 由于 PP 可能非常大,Chris 只需要输出 PP 对 998 244 353998\,244\,353 取模的结果。

Chris 很快就解决了这个问题,但他太累了睡着了。除了感谢 Chris,现在轮到你来编写程序,计算给定输入数据的答案。

注意:由于输入输出数据量较大,你可能需要对本题进行优化。

例如,在 C++ 中,只需在 main() 函数开头加入如下代码即可:

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr); std::cout.tie(nullptr);
}

输入格式

每组测试数据包含多个测试用例。输入的第一行包含一个整数 tt(1≤t≤1041 \leq t \leq 10^4),表示测试用例的数量。接下来是每个测试用例的描述。

每个测试用例的第一行包含两个整数 nn 和 qq(1≤n≤2⋅1051 \leq n \leq 2 \cdot 10^5,1≤q≤2⋅1051 \leq q \leq 2 \cdot 10^5),分别表示数组长度和操作次数。

第二行包含 nn 个整数 a1,a2,…,ana_1, a_2, \ldots, a_n(1≤ai≤5⋅1081 \leq a_i \leq 5 \cdot 10^8),表示数组 aa。

第三行包含 nn 个整数 b1,b2,…,bnb_1, b_2, \ldots, b_n(1≤bi≤5⋅1081 \leq b_i \leq 5 \cdot 10^8),表示数组 bb。

接下来 qq 行,每行包含两个整数 oo 和 xx(o∈{1,2}o \in \{1, 2\},1≤x≤n1 \leq x \leq n),表示一次操作。

保证所有测试用例中 nn 的总和与 qq 的总和均不超过 4⋅1054 \cdot 10^5。

输出格式

对于每个测试用例,输出 q+1q+1 个整数,表示 Chris 计算出的答案,对 998 244 353998\,244\,353 取模。

输入输出样例

  • 输入#1

    4
    3 4
    1 1 2
    3 2 1
    1 3
    2 3
    1 1
    2 1
    6 8
    1 4 2 7 3 5
    7 6 5 6 3 3
    2 5
    1 6
    1 5
    1 5
    1 5
    2 3
    2 3
    1 6
    13 8
    7 7 6 6 5 5 5 2 2 3 4 5 1
    1 4 1 9 6 6 9 1 5 1 3 8 4
    2 2
    2 11
    2 4
    2 4
    1 7
    1 1
    2 12
    1 5
    5 3
    10000000 20000000 30000000 40000000 50000000
    10000000 20000000 30000000 40000000 50000000
    1 1
    2 2
    2 1

    输出#1

    2 3 3 6 6
    840 840 1008 1344 1680 2016 2016 2016 2352
    2116800 2646000 3528000 3528000 3528000 4233600 4838400 4838400 4838400
    205272023 205272023 205272023 264129429

说明/提示

在第一个测试用例中:

  • 修改前,Chris 可以将 bb 重排为 [1,2,3][1, 2, 3],此时 P=∏i=1nmin⁡(ai,bi)=1⋅1⋅2=2P = \prod\limits_{i=1}^n \min(a_i, b_i) = 1 \cdot 1 \cdot 2 = 2。可以证明这是最大值。例如,如果 Chris 将 bb 重排为 [2,3,1][2, 3, 1],那么 P=1⋅1⋅1=1<2P = 1 \cdot 1 \cdot 1 = 1 < 2,不是最优解。
  • 第一次修改后,Chris 仍可以将 bb 重排为 [1,2,3][1, 2, 3],此时 P=1⋅1⋅3=3P = 1 \cdot 1 \cdot 3 = 3,达到最大值。
  • 第二次修改后,Chris 可以将 bb 重排为 [2,2,3][2, 2, 3],此时 P=1⋅1⋅3=3P = 1 \cdot 1 \cdot 3 = 3,达到最大值。
  • 第三次修改后,Chris 可以将 bb 重排为 [2,2,3][2, 2, 3],此时 P=6P = 6,达到最大值。
  • 第四次修改后,Chris 可以将 bb 重排为 [2,2,4][2, 2, 4],此时 P=6P = 6,达到最大值。

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页