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

Sqrt decomposition

  • 1.
    Sqrt Decomposition 2016.7.4 BOJCamp Day 1 ์žฅํ™์ค€(h0ngjun7)
  • 2.
    Concept โ€ข ๐‘ ํฌ๊ธฐ๋กœ๋ฐ์ดํ„ฐ๋ฅผ ์žฌ๊ฐ€๊ณตํ•˜์—ฌ ์—ฐ์‚ฐ์˜ ํšจ์œจ์„ ๋†’์ž„ โ€ข ๊ตฌ๊ฐ„์„ ๋Œ€ํ‘œํ•˜๋Š” ๊ฐ’์— ๋Œ€ํ•œ ์—ฐ์‚ฐ์˜ ์†๋„ ํ–ฅ์ƒ โ€ข ์ฟผ๋ฆฌ ์ฒ˜๋ฆฌ ์ˆœ์„œ๋ฅผ ๋ฐ”๊พธ์–ด ์ „์ฒด์ ์ธ ์‹œ๊ฐ„๋ณต์žก๋„ ๊ฐœ์„  โ€ข ์ฝ”๋”ฉ์ด ์ต์ˆ™ํ•ด์ง€๋ฉด, ๋น ๋ฅด๊ฒŒ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.
  • 3.
  • 4.
    BOJ 2042 โ€ข Array,Area โ€ข ์›์†Œ๊ฐ€ N๊ฐœ์ธ ์ˆ˜์—ด์ด ์ฃผ์–ด์ง. โ€ข M๊ฐœ์˜ ์ฟผ๋ฆฌ๊ฐ€ ์žˆ์Œ 1) ์ˆ˜์—ด์˜ i๋ฒˆ์งธ ์›์†Œ์˜ ๊ฐ’์„ ๋‹ค๋ฅธ ์ˆ˜๋กœ ๋ฐ”๊พธ๊ธฐ 2) ์ˆ˜์—ด์˜ L๋ฒˆ์งธ๋ถ€ํ„ฐ R๋ฒˆ์งธ๊นŒ์ง€์˜ ํ•ฉ์„ ๊ตฌํ•˜๊ธฐ
  • 5.
    BOJ 2042 โ€ข ์ˆ˜์—ดX(1 โ€ฆ n) โ€ข 500๊ฐœ์”ฉ ๋ฌถ์Œ์œผ๋กœ ์ƒ๊ฐํ•ด๋ณด์ž. โ€ข ํ•œ ๋ฌถ์Œ์— ๋Œ€ํ•œ ์ „์ฒด ํ•ฉ์„ ์ €์žฅ โ€ข 1)๋ฒˆ ์ฟผ๋ฆฌ์— ๋Œ€ํ•ด ์ „์ฒด ํ•ฉ์€ O(1)์— ์ˆ˜์ • ๊ฐ€๋Šฅ
  • 6.
  • 7.
  • 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.
  • 15.
    Tips ์ •์  y์—์„œ ์ •์ x๋กœ ์˜ฌ๋ผ๊ฐˆ ๋•Œ ๋ถ‰์€์ƒ‰ : branch ํ‘ธ๋ฅธ์ƒ‰ : unit
  • 16.
    Remember โ€ข ๋ฌถ์Œ! โ€ข ๊ฐ’์„์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์ฐธ์กฐํ•  ๋•Œ, ๊ทธ ๋ฌถ์Œ ์ „์ฒด๋ฅผ ๊ฐฑ์‹ ํ•  ํ•„์š”๊ฐ€...?! โ€ข ๋ฌถ์Œ์ด ๊ฐ๊ฐ์˜ ์š”์†Œ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ๋„ ๊ณ ๋ ค โ€ข ๊ฒฝํ—˜์ƒ 10๋งŒ โ†’ 500, 50๋งŒ โ†’ 700
  • 17.
    Related Problems โ€ข BOJ2357 - ์ตœ์†Œ๊ฐ’๊ณผ ์ตœ๋Œ€๊ฐ’ (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)