QOJ.ac

QOJ

時間限制: 2 s 記憶體限制: 256 MB 總分: 100 可 Hack ✓

#14970. Nene vs. Monsters (Hard Version)

统计

これはこの問題のハードバージョンです。このバージョンとイージーバージョンの唯一の違いは $a_i$ に関する制約です。両方のバージョンを解いた場合にのみハックを行うことができます。

Nene は円状に配置された $n$ 体のモンスターと戦っています。これらのモンスターには $1$ から $n$ までの番号が振られており、$i$ 番目 ($1 \le i \le n$) のモンスターの現在のエネルギーレベルは $a_i$ です。

モンスターは非常に強力であるため、Nene は「隣人を攻撃せよ (Attack Your Neighbour)」という呪文を使って戦うことにしました。Nene がこの呪文を使うと、以下の行動が順番に 1つずつ 発生します。

  • $1$ 番目のモンスターが $2$ 番目のモンスターを攻撃する。
  • $2$ 番目のモンスターが $3$ 番目のモンスターを攻撃する。
  • ...
  • $(n-1)$ 番目のモンスターが $n$ 番目のモンスターを攻撃する。
  • $n$ 番目のモンスターが $1$ 番目のモンスターを攻撃する。

エネルギーレベル $x$ のモンスターがエネルギーレベル $y$ のモンスターを攻撃すると、防御側のモンスターのエネルギーレベルは $\max(0, y-x)$ になります(攻撃側のモンスターのエネルギーレベルは $x$ のまま変化しません)。

Nene はこの呪文を $10^{100}$ 回使用し、その後もエネルギーレベルがゼロではないモンスターを自分で処理する予定です。彼女がこの呪文を $10^{100}$ 回使用した後に、どのモンスターのエネルギーレベルがゼロではないかを判定してください。

入力

各テストケースは複数のテストケースを含みます。最初の行にはテストケースの数 $t$ ($1 \le t \le 10^4$) が含まれます。続いて各テストケースの説明が続きます。

各テストケースの最初の行には、モンスターの数 $n$ ($2 \le n \le 2 \cdot 10^5$) が含まれます。

2 行目には、$n$ 個の整数 $a_1, a_2, \ldots, a_n$ ($0 \le a_i \le 10^9$) が含まれます。これはモンスターの現在のエネルギーレベルです。

すべてのテストケースにおける $n$ の総和は $2 \cdot 10^5$ を超えないことが保証されています。

出力

各テストケースについて、

  • 1 行目に、$10^{100}$ 回の呪文使用後にエネルギーレベルがゼロではないモンスターの数 $m$ を出力してください。
  • 2 行目に、$m$ 個の整数 $i_1, i_2, \ldots, i_m$ ($1 \le i_1 < i_2 < \ldots < i_m \le n$) を昇順で出力してください。

$m=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

注記

最初のテストケースでは、呪文の最初の 3 回の使用中に以下の順序で行動が発生します。

  • Nene が 1 回目の「隣人を攻撃せよ」を使用する。
  • 1 番目のモンスターが 2 番目のモンスターを攻撃し、攻撃後 2 番目のモンスターのエネルギーレベルは $\max(0, 5-2)=3$ になる。
  • 2 番目のモンスターが 3 番目のモンスターを攻撃し、攻撃後 3 番目のモンスターのエネルギーレベルは $\max(0, 3-3)=0$ になる。
  • 3 番目のモンスターが 1 番目のモンスターを攻撃し、攻撃後 1 番目のモンスターのエネルギーレベルは $\max(0, 2-0)=2$ になる。
  • Nene が 2 回目の「隣人を攻撃せよ」を使用する。
  • 1 番目のモンスターが 2 番目のモンスターを攻撃し、攻撃後 2 番目のモンスターのエネルギーレベルは $\max(0, 3-2)=1$ になる。
  • 2 番目のモンスターが 3 番目のモンスターを攻撃し、攻撃後 3 番目のモンスターのエネルギーレベルは $\max(0, 0-1)=0$ になる。
  • 3 番目のモンスターが 1 番目のモンスターを攻撃し、攻撃後 1 番目のモンスターのエネルギーレベルは $\max(0, 2-0)=2$ になる。
  • Nene が 3 回目の「隣人を攻撃せよ」を使用する。
  • 1 番目のモンスターが 2 番目のモンスターを攻撃し、攻撃後 2 番目のモンスターのエネルギーレベルは $\max(0, 1-2)=0$ になる。
  • 2 番目のモンスターが 3 番目のモンスターを攻撃し、攻撃後 3 番目のモンスターのエネルギーレベルは $\max(0, 0-0)=0$ になる。
  • 3 番目のモンスターが 1 番目のモンスターを攻撃し、攻撃後 1 番目のモンスターのエネルギーレベルは $\max(0, 2-0)=2$ になる。

これ以降の呪文使用後、モンスターのエネルギーレベルは変化しません。したがって、最終的にエネルギーレベルがゼロではないのは 1 番目のモンスターのみです。

2 番目のテストケースでは、両方のモンスターが最初からエネルギーレベル 0 を持っています。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.