Official

D - Substr Swap Editorial by toam


この問題は累積和の練習問題です.

各 index に対して,そこが何回 swap されたかが分かれば,最終的な \(S\) を求めることができます.具体的には,答えの \(i\) 文字目は swap された回数が偶数なら \(S_i\),奇数なら \(T_i\) です.swap された回数は累積和を用いることで高速に求めることができます.計算量は \(O(N+M)\) です.

N, M = map(int, input().split())
s = input()
t = input()
cum = [0] * (N + 1)
for _ in range(M):
    l, r = map(int, input().split())
    cum[l - 1] += 1
    cum[r] -= 1
for i in range(N):
    cum[i + 1] += cum[i]
ans = [s[i] if cum[i] % 2 == 0 else t[i] for i in range(N)]
print("".join(ans))

posted:
last update: