星穹铁道
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\)。

浙公网安备 33010602011771号