SlideShare a Scribd company logo
Sqrt Decomposition
2016.7.4 BOJ Camp Day 1
장홍준(h0ngjun7)
Concept
• 𝑁 크기로 데이터를 재가공하여 연산의 효율을 높임
• 구간을 대표하는 값에 대한 연산의 속도 향상
• 쿼리 처리 순서를 바꾸어 전체적인 시간복잡도 개선
• 코딩이 익숙해지면, 빠르게 문제를 해결할 수 있다.
Structure
• Array, Area
• Query
• Tree
BOJ 2042
• Array, Area
• 원소가 N개인 수열이 주어짐.
• M개의 쿼리가 있음
1) 수열의 i번째 원소의 값을 다른 수로 바꾸기
2) 수열의 L번째부터 R번째까지의 합을 구하기
BOJ 2042
• 수열 X(1 … n)
• 500개씩 묶음으로 생각해보자.
• 한 묶음에 대한 전체 합을 저장
• 1)번 쿼리에 대해 전체 합은 O(1)에 수정 가능
Tip
Tip
BOJ 8462 배열의 힘
• POI Training Camp ONTAK 2011 62번
• Query
• O(nt) → Mo’s algorithm! O(n log n + n 𝑛)
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
넘나 오래 걸리는 것…
BOJ 8462 배열의 힘
• 그럼 [L, R]을 L과 R의 차이가 적도록 재배열해서 답을 구하고
다시 쿼리 순서대로 답을 출력하면 되지 않을까?...
• [L, R]을 다음과 같은 우선 순위로 정렬
1) L / 𝑁 오름차순으로 정렬
2) L / 𝑁 이 같다면 R 오름차순으로
BOJ 8462 배열의 힘
• L / 𝑁 이 같은 쿼리끼리 집합으로 묶으면 총 𝑁개의 집합
• 각 집합에서
L(k)→L(k+1) 다 합하면 최대 𝑁
R(k)→R(k+1) 다 합하면 최대 N
전체적인 시간복잡도는 O(N 𝑁)
정렬하는 데 필요한 시간복잡도 O(N log N)
BOJ 12746 Traffic(Large)
• 2016 Spring RUN@KAIST Programming Contest E2
• Tree
• 트리에 쿼리로 주어지는 경로에 해당하는 모든 간선들에 +1씩 해준다.
이 때, 간선이 가지는 가중치의 최댓값과 최대인 간선 모두를 출력하는
문제이다.
• O(NQ) : so easy
• 트리에서도 묶음을 나눌 수 있지 않을까
BOJ 12746 Traffic(Large)
• dfs number를 이용
• 트리에서 branch를 나눈다.
기준 : 정점 u의 자식 v
v(1)은 u의 branch를 이어받음.
v(2 … k)는 새로운 branch
• branch의 길이는 최대 𝑁
Tips
Tips
정점 y에서 정점 x로 올라갈 때
붉은색 : branch
푸른색 : unit
Remember
• 묶음!
• 값을 수정하거나 참조할 때, 그 묶음 전체를 갱신할 필요가...?!
• 묶음이 각각의 요소에 미치는 영향도 고려
• 경험상 10만 → 500, 50만 → 700
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)
Sqrt decomposition

More Related Content

What's hot

Efficient linear skyline algorithm in two dimensional space
Efficient linear skyline algorithm in two dimensional spaceEfficient linear skyline algorithm in two dimensional space
Efficient linear skyline algorithm in two dimensional space
희수 박
 
Flow based generative models
Flow based generative modelsFlow based generative models
Flow based generative models
수철 박
 
Gmm to vgmm
Gmm to vgmmGmm to vgmm
Gmm to vgmm
수철 박
 
2021 2학기 정기 세미나 4주차
2021 2학기 정기 세미나 4주차2021 2학기 정기 세미나 4주차
2021 2학기 정기 세미나 4주차
Moonki Choi
 
Transliteration English to Korean
Transliteration English to KoreanTransliteration English to Korean
Transliteration English to Korean
Hyunwoo Kim
 
이산수학[1].110707.l01.행렬
이산수학[1].110707.l01.행렬이산수학[1].110707.l01.행렬
이산수학[1].110707.l01.행렬Jung-Ho Kim
 
알고리즘 스터디(정렬) Seungdols
알고리즘 스터디(정렬) Seungdols알고리즘 스터디(정렬) Seungdols
알고리즘 스터디(정렬) Seungdols
seungdols
 
Data Structure 2
Data Structure 2Data Structure 2
Data Structure 2yonsei
 
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
NAVER D2
 
그래프의 최단 경로 찾기
그래프의 최단 경로 찾기그래프의 최단 경로 찾기
그래프의 최단 경로 찾기
Jung-Ho Kim
 
이산치3보고서
이산치3보고서이산치3보고서
이산치3보고서KimChangHoen
 
Eigendecomposition and pca
Eigendecomposition and pcaEigendecomposition and pca
Eigendecomposition and pca
Jinhwan Suk
 
데이터베이스 시스템 chapter3_STG박하은
데이터베이스 시스템 chapter3_STG박하은데이터베이스 시스템 chapter3_STG박하은
데이터베이스 시스템 chapter3_STG박하은
ETRIBE_STG
 
Graph mst
Graph mstGraph mst
Graph mst
GNGLB
 
internetinternet
internetinternetinternetinternet
internetinternet
gueste60202c
 
The Art of Computer Programming 2.3.2 Tree
The Art of Computer Programming 2.3.2 TreeThe Art of Computer Programming 2.3.2 Tree
The Art of Computer Programming 2.3.2 Tree
hyun soomyung
 

What's hot (17)

Efficient linear skyline algorithm in two dimensional space
Efficient linear skyline algorithm in two dimensional spaceEfficient linear skyline algorithm in two dimensional space
Efficient linear skyline algorithm in two dimensional space
 
Flow based generative models
Flow based generative modelsFlow based generative models
Flow based generative models
 
Gmm to vgmm
Gmm to vgmmGmm to vgmm
Gmm to vgmm
 
2021 2학기 정기 세미나 4주차
2021 2학기 정기 세미나 4주차2021 2학기 정기 세미나 4주차
2021 2학기 정기 세미나 4주차
 
Transliteration English to Korean
Transliteration English to KoreanTransliteration English to Korean
Transliteration English to Korean
 
이산수학[1].110707.l01.행렬
이산수학[1].110707.l01.행렬이산수학[1].110707.l01.행렬
이산수학[1].110707.l01.행렬
 
알고리즘 스터디(정렬) Seungdols
알고리즘 스터디(정렬) Seungdols알고리즘 스터디(정렬) Seungdols
알고리즘 스터디(정렬) Seungdols
 
Data Structure 2
Data Structure 2Data Structure 2
Data Structure 2
 
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
 
그래프의 최단 경로 찾기
그래프의 최단 경로 찾기그래프의 최단 경로 찾기
그래프의 최단 경로 찾기
 
이항계수
이항계수이항계수
이항계수
 
이산치3보고서
이산치3보고서이산치3보고서
이산치3보고서
 
Eigendecomposition and pca
Eigendecomposition and pcaEigendecomposition and pca
Eigendecomposition and pca
 
데이터베이스 시스템 chapter3_STG박하은
데이터베이스 시스템 chapter3_STG박하은데이터베이스 시스템 chapter3_STG박하은
데이터베이스 시스템 chapter3_STG박하은
 
Graph mst
Graph mstGraph mst
Graph mst
 
internetinternet
internetinternetinternetinternet
internetinternet
 
The Art of Computer Programming 2.3.2 Tree
The Art of Computer Programming 2.3.2 TreeThe Art of Computer Programming 2.3.2 Tree
The Art of Computer Programming 2.3.2 Tree
 

Viewers also liked

Problem Solving GuideBook
Problem Solving GuideBookProblem Solving GuideBook
Problem Solving GuideBook
Hongjun Jang
 
Network flow
Network flowNetwork flow
Network flow
Hongjun Jang
 
ALPS & AlKor Intro Slides
ALPS & AlKor Intro SlidesALPS & AlKor Intro Slides
ALPS & AlKor Intro Slides
Hongjun Jang
 
1. alps c c++
1. alps c c++1. alps c c++
1. alps c c++
Hongjun Jang
 
3. basic data structures(2)
3. basic data structures(2)3. basic data structures(2)
3. basic data structures(2)
Hongjun Jang
 
2. basic data structures(1)
2. basic data structures(1)2. basic data structures(1)
2. basic data structures(1)
Hongjun Jang
 
Teamwork in programming contests
Teamwork in programming contestsTeamwork in programming contests
Teamwork in programming contests
Hongjun Jang
 
2016 고려대학교 신입생 프로그래밍 경시대회 해법
2016 고려대학교 신입생 프로그래밍 경시대회 해법2016 고려대학교 신입생 프로그래밍 경시대회 해법
2016 고려대학교 신입생 프로그래밍 경시대회 해법
Hongjun Jang
 
COCI 2006/2007 contest #1 solution
COCI 2006/2007 contest #1 solutionCOCI 2006/2007 contest #1 solution
COCI 2006/2007 contest #1 solution
Hongjun Jang
 
Baekjoon Online Judge 1492번 풀이
Baekjoon Online Judge 1492번 풀이Baekjoon Online Judge 1492번 풀이
Baekjoon Online Judge 1492번 풀이
Hongjun Jang
 
프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기
Jongwook Choi
 
2016 FunctionCup 풀이
2016 FunctionCup 풀이2016 FunctionCup 풀이
2016 FunctionCup 풀이
geunwoo bae
 

Viewers also liked (12)

Problem Solving GuideBook
Problem Solving GuideBookProblem Solving GuideBook
Problem Solving GuideBook
 
Network flow
Network flowNetwork flow
Network flow
 
ALPS & AlKor Intro Slides
ALPS & AlKor Intro SlidesALPS & AlKor Intro Slides
ALPS & AlKor Intro Slides
 
1. alps c c++
1. alps c c++1. alps c c++
1. alps c c++
 
3. basic data structures(2)
3. basic data structures(2)3. basic data structures(2)
3. basic data structures(2)
 
2. basic data structures(1)
2. basic data structures(1)2. basic data structures(1)
2. basic data structures(1)
 
Teamwork in programming contests
Teamwork in programming contestsTeamwork in programming contests
Teamwork in programming contests
 
2016 고려대학교 신입생 프로그래밍 경시대회 해법
2016 고려대학교 신입생 프로그래밍 경시대회 해법2016 고려대학교 신입생 프로그래밍 경시대회 해법
2016 고려대학교 신입생 프로그래밍 경시대회 해법
 
COCI 2006/2007 contest #1 solution
COCI 2006/2007 contest #1 solutionCOCI 2006/2007 contest #1 solution
COCI 2006/2007 contest #1 solution
 
Baekjoon Online Judge 1492번 풀이
Baekjoon Online Judge 1492번 풀이Baekjoon Online Judge 1492번 풀이
Baekjoon Online Judge 1492번 풀이
 
프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기프로그래밍 대회: C++11 이야기
프로그래밍 대회: C++11 이야기
 
2016 FunctionCup 풀이
2016 FunctionCup 풀이2016 FunctionCup 풀이
2016 FunctionCup 풀이
 

Similar to Sqrt decomposition

[데브루키]노대영_알고리즘 스터디
[데브루키]노대영_알고리즘 스터디[데브루키]노대영_알고리즘 스터디
[데브루키]노대영_알고리즘 스터디
대영 노
 
Lecture 4: Neural Networks I
Lecture 4: Neural Networks ILecture 4: Neural Networks I
Lecture 4: Neural Networks I
Sang Jun Lee
 
Tree LIS (2015.03.29)
Tree LIS (2015.03.29)Tree LIS (2015.03.29)
Tree LIS (2015.03.29)
Jaehyun Koo
 
[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘
[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘
[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘
GDGCampusKorea
 
IOI 2005 정원 분할 (2015.03.05)
IOI 2005 정원 분할 (2015.03.05)IOI 2005 정원 분할 (2015.03.05)
IOI 2005 정원 분할 (2015.03.05)
Jaehyun Koo
 
DP 알고리즘에 대해 알아보자.pdf
DP 알고리즘에 대해 알아보자.pdfDP 알고리즘에 대해 알아보자.pdf
DP 알고리즘에 대해 알아보자.pdf
Ho Jeong Im
 
Computational Complexity
Computational ComplexityComputational Complexity
Computational Complexity
skku_npc
 
Keras
KerasKeras
Keras
나윤 황
 
전자해도세미나
전자해도세미나전자해도세미나
전자해도세미나
Jiyoon Kim
 

Similar to Sqrt decomposition (9)

[데브루키]노대영_알고리즘 스터디
[데브루키]노대영_알고리즘 스터디[데브루키]노대영_알고리즘 스터디
[데브루키]노대영_알고리즘 스터디
 
Lecture 4: Neural Networks I
Lecture 4: Neural Networks ILecture 4: Neural Networks I
Lecture 4: Neural Networks I
 
Tree LIS (2015.03.29)
Tree LIS (2015.03.29)Tree LIS (2015.03.29)
Tree LIS (2015.03.29)
 
[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘
[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘
[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘
 
IOI 2005 정원 분할 (2015.03.05)
IOI 2005 정원 분할 (2015.03.05)IOI 2005 정원 분할 (2015.03.05)
IOI 2005 정원 분할 (2015.03.05)
 
DP 알고리즘에 대해 알아보자.pdf
DP 알고리즘에 대해 알아보자.pdfDP 알고리즘에 대해 알아보자.pdf
DP 알고리즘에 대해 알아보자.pdf
 
Computational Complexity
Computational ComplexityComputational Complexity
Computational Complexity
 
Keras
KerasKeras
Keras
 
전자해도세미나
전자해도세미나전자해도세미나
전자해도세미나
 

Sqrt decomposition

  • 1. Sqrt Decomposition 2016.7.4 BOJ Camp Day 1 장홍준(h0ngjun7)
  • 2. Concept • 𝑁 크기로 데이터를 재가공하여 연산의 효율을 높임 • 구간을 대표하는 값에 대한 연산의 속도 향상 • 쿼리 처리 순서를 바꾸어 전체적인 시간복잡도 개선 • 코딩이 익숙해지면, 빠르게 문제를 해결할 수 있다.
  • 4. BOJ 2042 • Array, Area • 원소가 N개인 수열이 주어짐. • M개의 쿼리가 있음 1) 수열의 i번째 원소의 값을 다른 수로 바꾸기 2) 수열의 L번째부터 R번째까지의 합을 구하기
  • 5. BOJ 2042 • 수열 X(1 … n) • 500개씩 묶음으로 생각해보자. • 한 묶음에 대한 전체 합을 저장 • 1)번 쿼리에 대해 전체 합은 O(1)에 수정 가능
  • 6. Tip
  • 7. Tip
  • 8. BOJ 8462 배열의 힘 • POI Training Camp ONTAK 2011 62번 • Query • O(nt) → Mo’s algorithm! O(n log n + n 𝑛)
  • 9. 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 넘나 오래 걸리는 것…
  • 10. BOJ 8462 배열의 힘 • 그럼 [L, R]을 L과 R의 차이가 적도록 재배열해서 답을 구하고 다시 쿼리 순서대로 답을 출력하면 되지 않을까?... • [L, R]을 다음과 같은 우선 순위로 정렬 1) L / 𝑁 오름차순으로 정렬 2) L / 𝑁 이 같다면 R 오름차순으로
  • 11. BOJ 8462 배열의 힘 • L / 𝑁 이 같은 쿼리끼리 집합으로 묶으면 총 𝑁개의 집합 • 각 집합에서 L(k)→L(k+1) 다 합하면 최대 𝑁 R(k)→R(k+1) 다 합하면 최대 N 전체적인 시간복잡도는 O(N 𝑁) 정렬하는 데 필요한 시간복잡도 O(N log N)
  • 12. BOJ 12746 Traffic(Large) • 2016 Spring RUN@KAIST Programming Contest E2 • Tree • 트리에 쿼리로 주어지는 경로에 해당하는 모든 간선들에 +1씩 해준다. 이 때, 간선이 가지는 가중치의 최댓값과 최대인 간선 모두를 출력하는 문제이다. • O(NQ) : so easy • 트리에서도 묶음을 나눌 수 있지 않을까
  • 13. BOJ 12746 Traffic(Large) • dfs number를 이용 • 트리에서 branch를 나눈다. 기준 : 정점 u의 자식 v v(1)은 u의 branch를 이어받음. v(2 … k)는 새로운 branch • branch의 길이는 최대 𝑁
  • 14. Tips
  • 15. Tips 정점 y에서 정점 x로 올라갈 때 붉은색 : branch 푸른색 : unit
  • 16. Remember • 묶음! • 값을 수정하거나 참조할 때, 그 묶음 전체를 갱신할 필요가...?! • 묶음이 각각의 요소에 미치는 영향도 고려 • 경험상 10만 → 500, 50만 → 700
  • 17. 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)