알고리즘

구간 합(Prefix sum) 의 응용 (부분 배열의 합 A 찾기)

mines213 2024. 8. 28. 23:25

코드포스 문제를 풀어보는 도중 구간합을 약간 응용한 문제를 발견했다.

https://codeforces.com/contest/1915/problem/E

 

배열 A의 구간 합 S에서 S[X]=S[Y]라면, A[x+1] 부터 A[y] 까지의 합은 0이다.

 

이유 설명

두 구간 합 S(X) 와 S(Y) 를 풀어쓰면 (X<Y) :

 

 

S(Y) - S(X) = 0 을 풀어쓰면 :

 

 

 

이것을 이용해서 부분 배열의 합이 0인 부분이 있는 지 O(N)에 찾을 수 있다.

map 또는 unordered_map 을 이용해서 값 X를 저장하고,

X가 이미 존재한다면 부분 배열의 합이 0인 부분이 존재한다는 것을 알 수 있다.

 

 

이것을 이용해서 부분 배열의 합이 A인 부분이 있는 지도 확인할 수 있다.

S(Y)-S(X) = A라면,