평방분할(sqrt decomposition)

구간 쿼리를 처리해야 하는 문제에서 구간 트리나 인덱스 트리를 대신해서 쓸 수 있는 방법입니다.
(따라서 구간 트리나 인덱스 트리로 풀 수 있는 문제의 대부분을 평방 분할로 풀 수 있습니다.)

핵심은 길이가 N인 배열에서 sqrt(N) 길이의 구간마다 대표값을 구해 놓는다는 것입니다.
이렇게 대표값을 구해놓으면 Q개의 구간 쿼리를 O(Q * sqrt(N))의 시간복잡도로 처리 할 수 있습니다.

관련 문제 : 

예제 : 
http://ideone.com/I7vkPa - 코드 (구간합을 다뤘지만 최소값, 최대값 등등 응용 가능합니다.)

심화 : 
Mo's Algorithm (평방 분할 + 쿼리 정렬)

댓글

이 블로그의 인기 게시물

BOJ 11478 - 서로 다른 부분 문자열의 개수

repeated squaring