CF1956E2.Nene vs. Monsters (Hard Version)

省选/NOI-

通过率:0%

AC君温馨提醒

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

题目描述

这是该问题的困难版本。两个版本的唯一区别在于 aia_i 的约束条件。只有当你同时解决了两个版本的问题时,才能进行 Hack。

Nene 正在与 nn 个怪物战斗,这些怪物围成一个圆圈。这些怪物从 11 到 nn 编号,第 ii 个怪物(1≤i≤n1 \le i \le n)当前的能量值为 aia_i。

由于怪物们太强大,Nene 决定使用“攻击你的邻居”法术与它们战斗。当 Nene 施放这个法术时,依次发生以下操作:

  • 第 11 个怪物攻击第 22 个怪物;
  • 第 22 个怪物攻击第 33 个怪物;
  • …\ldots
  • 第 (n−1)(n-1) 个怪物攻击第 nn 个怪物;
  • 第 nn 个怪物攻击第 11 个怪物。

当能量值为 xx 的怪物攻击能量值为 yy 的怪物时,被攻击怪物的能量值变为 max⁡(0,y−x)\max(0, y-x)(攻击者的能量值仍为 xx)。

Nene 计划将这个法术使用 1010010^{100} 次,并亲自解决那些在此之后仍有非零能量的怪物。她希望你帮她确定,在施放上述法术 1010010^{100} 次后,哪些怪物的能量值仍然不为零。

输入格式

每个测试包含多个测试用例。第一行包含测试用例数 tt(1≤t≤1041 \le t \le 10^4)。接下来是每个测试用例的描述。

每个测试用例的第一行包含一个整数 nn(2≤n≤2⋅1052 \le n \le 2 \cdot 10^5),表示怪物的数量。

第二行包含 nn 个整数 a1,a2,…,ana_1, a_2, \ldots, a_n(0≤ai≤1090 \le a_i \le 10^9),表示每个怪物当前的能量值。

保证所有测试用例中 nn 的总和不超过 2⋅1052 \cdot 10^5。

输出格式

对于每个测试用例:

  • 第一行输出一个整数 mm,表示在施放 1010010^{100} 次法术后能量值仍不为零的怪物数量;
  • 第二行输出 mm 个递增的整数 i1,i2,…,imi_1, i_2, \ldots, i_m(1≤i1<i2<…<im≤n1 \le i_1 < i_2 < \ldots < i_m \le n),表示这些怪物的编号。

如果 m=0m=0,你可以输出一个空行,也可以不输出这一行。

输入输出样例

  • 输入#1

    5
    3
    2 5 3
    2
    0 0
    4
    1 5 7 2
    4
    4 2 1 2
    13
    1 1 4 5 1 4 1 9 1 9 8 1 0

    输出#1

    1
    1 
    0
    
    1
    1 
    2
    1 3 
    6
    1 3 6 8 10 12

说明/提示

在第一个测试用例中,前 33 次施放法术时发生如下操作:

  • Nene 第一次施放“攻击你的邻居”法术;
  • 第 11 个怪物攻击第 22 个怪物,攻击后第 22 个怪物的能量变为 max⁡(0,5−2)=3\max(0, 5-2)=3;
  • 第 22 个怪物攻击第 33 个怪物,攻击后第 33 个怪物的能量变为 max⁡(0,3−3)=0\max(0, 3-3)=0;
  • 第 33 个怪物攻击第 11 个怪物,攻击后第 11 个怪物的能量变为 max⁡(0,2−0)=2\max(0, 2-0)=2;
  • Nene 第二次施放法术;
  • 第 11 个怪物攻击第 22 个怪物,攻击后第 22 个怪物的能量变为 max⁡(0,3−2)=1\max(0, 3-2)=1;
  • 第 22 个怪物攻击第 33 个怪物,攻击后第 33 个怪物的能量变为 max⁡(0,0−1)=0\max(0, 0-1)=0;
  • 第 33 个怪物攻击第 11 个怪物,攻击后第 11 个怪物的能量变为 max⁡(0,2−0)=2\max(0, 2-0)=2;
  • Nene 第三次施放法术;
  • 第 11 个怪物攻击第 22 个怪物,攻击后第 22 个怪物的能量变为 max⁡(0,1−2)=0\max(0, 1-2)=0;
  • 第 22 个怪物攻击第 33 个怪物,攻击后第 33 个怪物的能量变为 max⁡(0,0−0)=0\max(0, 0-0)=0;
  • 第 33 个怪物攻击第 11 个怪物,攻击后第 11 个怪物的能量变为 max⁡(0,2−0)=2\max(0, 2-0)=2。

之后每次施放法术,怪物们的能量值都不会再变化。因此,最终只有第 11 个怪物的能量值不为零。

在第二个测试用例中,两个怪物的初始能量值都为零。

由 ChatGPT 4.1 翻译

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

首页