18
Sqrt Decomposition 2016.7.4 BOJ Camp Day 1 장장장 (h0ngjun7)

Sqrt decomposition

Embed Size (px)

Citation preview

Page 1: Sqrt decomposition

Sqrt Decomposition2016.7.4 BOJ Camp Day 1

장홍준 (h0ngjun7)

Page 2: Sqrt decomposition

Concept• 크기로 데이터를 재가공하여 연산의 효율을 높임• 구간을 대표하는 값에 대한 연산의 속도 향상• 쿼리 처리 순서를 바꾸어 전체적인 시간복잡도 개선• 코딩이 익숙해지면 , 빠르게 문제를 해결할 수 있다 .

Page 3: Sqrt decomposition

Structure• Array, Area

• Query

• Tree

Page 4: Sqrt decomposition

BOJ 2042• Array, Area

• 원소가 N 개인 수열이 주어짐 .

• M 개의 쿼리가 있음1) 수열의 i 번째 원소의 값을 다른 수로 바꾸기2) 수열의 L 번째부터 R 번째까지의 합을 구하기

Page 5: Sqrt decomposition

BOJ 2042• 수열 X(1 … n)

• 500 개씩 묶음으로 생각해보자 .

• 한 묶음에 대한 전체 합을 저장• 1) 번 쿼리에 대해 전체 합은 O(1) 에 수정 가능

Page 6: Sqrt decomposition

Tip

Page 7: Sqrt decomposition

Tip

Page 8: Sqrt decomposition

BOJ 8462 배열의 힘• POI Training Camp ONTAK 2011 62 번• Query

• O(nt) → Mo’s algorithm! O(n log n + n)

Page 9: Sqrt decomposition

BOJ 8462 배열의 힘• Count [ a(i) ]

• 1 4 9 16 25 36 49

• 차이를 보면 3, 5, 7, 9, 11, 13, …

• 이전의 [L1, R1] 을 가지고 [L2, R2] 를 계산 : L1→L2, R1→R2

넘나 오래 걸리는 것…

Page 10: Sqrt decomposition

BOJ 8462 배열의 힘• 그럼 [L, R] 을 L 과 R 의 차이가 적도록 재배열해서 답을 구하고 다시 쿼리 순서대로 답을 출력하면 되지 않을까 ?...

• [L, R] 을 다음과 같은 우선 순위로 정렬1) L / 오름차순으로 정렬2) L / 같다면 R 오름차순으로

Page 11: Sqrt decomposition

BOJ 8462 배열의 힘• L / 리 집합으로 묶으면 총 의 집합• 각 집합에서L(k)→L(k+1) 다 합하면 최대 R(k)→R(k+1) 다 합하면 최대 N

전체적인 시간복잡도는 O(N)정렬하는 데 필요한 시간복잡도 O(N log N)

Page 12: Sqrt decomposition

BOJ 12746 Traffic(Large)• 2016 Spring RUN@KAIST Programming Contest E2• Tree

• 트리에 쿼리로 주어지는 경로에 해당하는 모든 간선들에 +1 씩 해준다 . 이 때 , 간선이 가지는 가중치의 최댓값과 최대인 간선 모두를 출력하는 문제이다 .

• O(NQ) : so easy

• 트리에서도 묶음을 나눌 수 있지 않을까

Page 13: Sqrt decomposition

BOJ 12746 Traffic(Large)• dfs number 를 이용• 트리에서 branch 를 나눈다 .기준 : 정점 u 의 자식 vv(1) 은 u 의 branch 를 이어받음 .v(2 … k) 는 새로운 branch

• branch 의 길이는 최대

Page 14: Sqrt decomposition

Tips

Page 15: Sqrt decomposition

Tips정점 y 에서 정점 x 로 올라갈 때붉은색 : branch

푸른색 : unit

Page 16: Sqrt decomposition

Remember• 묶음 !

• 값을 수정하거나 참조할 때 , 그 묶음 전체를 갱신할 필요가 ...?!

• 묶음이 각각의 요소에 미치는 영향도 고려• 경험상 10 만 → 500, 50 만 → 700

Page 17: Sqrt decomposition

Related Problems• BOJ 2357 - 최소값과 최대값 (Array)• BOJ 1321 – 군인 (Array)• BOJ 7469 - K 번째 숫자 (Array + Binary Search)• BOJ 12844 - XOR (Array)• BOJ 12795 - 반평면 땅따먹기 (Query - life time)• SRM 675 Div.1 LimitedMemorySeries1• JOI 2014 historical(oj.uz/problems/view/JOI14_historical)

Page 18: Sqrt decomposition