星穹铁道

Subtask 1

暴力。

Subtask 2

考虑正解。观察到操作是可逆的:
如果 \(z = 1\),那么操作是 a[i] += 1
如果 \(z = -1\),那么操作是 a[i] -= 1

因此,我们可以逆向思考,从最终状态反向推导初始状态。

假设所有操作已经完成,我们需要找到初始时 \(a_i\) 的值在某个范围内的数。我们可以逆向调整 \([L, R]\) 的范围:

  • 如果 \(z = 1\),那么操作会将某些 \(a_i\)\(v\) 变为 \(v + 1\)。逆向来看,如果 \(v + 1\) 在当前的 \([L, R]\) 内,那么 \(v\) 应该在 \([L-1, R-1]\) 内。特别地,如果 \(v \equiv y \pmod x\),那么 \(v\) 会被操作影响。
  • 类似地,如果 \(z = -1\),那么 \(v\) 应该在 \([L+1, R+1]\) 内。

我们可以从最后一次操作到第一次操作,逆向调整 \([L, R]\)

对于操作 \((x, y, z)\)

  • 如果 \(z = 1\)

    • 如果 \((L-1) \bmod x = y\),则 \(L\) 需要减 \(1\)(因为 \(v = L-1\) 会被操作后变为 \(L\))。
    • 如果 \(R \bmod x = y\),则 \(R\) 需要减 \(1\)(因为 \(v = R\) 会被操作后变为 \(R+1\))。
  • 如果 \(z = -1\)

    • 如果 \(L \bmod x = y\),则 \(L\) 需要加 \(1\)(因为 \(v = L\) 会被操作后变为 \(L-1\))。
    • 如果 \((R+1) \bmod x = y\),则 \(R\) 需要加 \(1\)(因为 \(v = R+1\) 会被操作后变为 \(R\))。

最后特判一下特殊情况 \(x = 1\)

posted @ 2025-08-17 08:14  swate  阅读(7)  评论(0)    收藏  举报
body{ cursor: url(https://files.cnblogs.com/files/wkfvawl/cursor.ico),auto; }