[๋ฌธ์ ํด๊ฒฐ๊ธฐ๋ฒ] 7. ์ด๋ถ ํ์
1. ํ์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋ N๊ฐ์ ์ ์ ๋ฐฐ์ด A[0], ..., A[N-1]์ด ์๋ค. X๊ฐ ์ฃผ์ด์ก์ ๋, A[i] = X๋ผ๋ฉด i๋ฅผ ๋ฆฌํดํ๋ ํจ์ find(N, X)๋ฅผ ์์ฑํ์์ค. ์ด ํจ์๋ ๋ด๋ถ์ ์ผ๋ก compare(i, val)์ ํธ์ถํ๋๋ฐ, ์ด๋ A[i]=val์ด๋ฉด 0, A[i] val์ด๋ฉด -1์ ๋ฆฌํดํ๋ ํจ์์ด๋ค. N์ ์ต๋ 100์ด๋ค. int find(int sub, int N, int X) { int start = 0, end = N-1, t; while (start 0) start = mid + 1; // ๊ธฐ์ค๊ฐ๋ณด๋ค ์์ผ๋ฉด start๋ฅผ ๋น๊ธฐ๊ธฐ else if (v) end = mid - 1; // ๊ธฐ์ค๊ฐ๋ณด๋ค ํฌ๋ฉด end๋ฅผ ๋น๊ธฐ๊ธฐ else return mid; }..
[๋ฌธ์ ํด๊ฒฐ๊ธฐ๋ฒ] 6. ์ธ๊ทธ๋จผํธ ํธ๋ฆฌ
1. Segment Tree ๋ถ๋ถํฉ ๋ฌธ์ ์์ ์์ฉ ๊ฐ๋ฅ ์์ฑ ์ฝ๋ 2. ํฉ์ ๊ตฌํ๋ ์ฝ๋ [start, end]์ ํฉ์ ๊ตฌํ๋ ค๋ฉด ๋ฃจํธ๋ถํฐ ์์ํ์ฌ ๋ค์์ ์ ๊ฒํ๋ค. ๋
ธ๋๊ฐ ๋ํ๋ด๋ ๊ตฌ๊ฐ์ด [left, right]๋ผ๋ฉด ๋ค์์ 4๊ฐ์ง ๊ฒฝ์ฐ๊ฐ ๊ฐ๋ฅํ๋ค. ๊ฐ ๊ฒฝ์ฐ๋ง๋ค ์ฒ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ๋ค. (1) [start, end]์ [left, right]๊ฐ ๊ฒน์น์ง ์์ -> ํ ์ผ์ด ์๋ค (2) [start, end]๊ฐ [left, right]๋ฅผ ํฌํจ -> ๋ฏธ๋ฆฌ ๊ตฌํด๋ [left, right]์ ํฉ์ ์ฌ์ฉํ๋ค. (3) [start, end]๋ฅผ [left, right]๊ฐ ํฌํจ -> ๋ ์์ ๋
ธ๋์ ๋ํด์ ์ ํํ ์ด๋ ๋
ธ๋๊ฐ [left, right]๋ฅผ ํฌํจํ๋์ง ์ฐพ๋๋ค. (4) [start, end]๊ฐ [left, right..
[๋ฌธ์ ํด๊ฒฐ๊ธฐ๋ฒ] 3. ์๋ฃ๊ตฌ์กฐ1
1. RMQ : Range Minimum Query (๋ฒ์ ์ต์ ์ฟผ๋ฆฌ) ๋ฐฐ์ด์ ๋ถ๋ถ๋ฐฐ์ด์์ ์ต์๊ฐ์ ์ฐพ๊ธฐ (1) O(n^3) ์ ์ฒ๋ฆฌ, O(1) ์ง์ : brute force ๋ฐฉ์์ผ๋ก ๊ฐ๋ฅํ RMQ(a,b)์ ๋ํ ๋ต์ ๋ชจ๋ ์ ์ฅํด๋๋๋ค. n^2์นธ์ ์ฑ์์ผํ๊ณ , ํ ์นธ์ ์ฑ์ธ ๋ ์ต๋ O(n)์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค. (2) O(n^2) ์ ์ฒ๋ฆฌ, O(1) ์ง์ : ๊ฐ๋ฅํ RMQ(a,b)์ ๋ํ ๋ต์ ๋ชจ๋ ์ ์ฅํ๋๋ฐ, RMQ(a,b+1) = min(RMQ(a,b) , A[b+1])์ ์ฌ์ฉํ์ฌ n^2์นธ์ ๊ฐ๊ฐ O(1)์ ์๊ฐ์ผ๋ก ์ฑ์ธ ์ ์๋ค. (3) O(n) ์ ์ฒ๋ฆฌ, O(sqrt(n)) ์ง์ : ๋ฐฐ์ด์ sqrt(n) ๋ฌถ์์ผ๋ก ๋๋ ํ ๊ฐ ๋ฌถ์์ ์ต์๊ฐ์ ๊ตฌํ๋๋ฐ์ O(n)์ด ๊ฑธ๋ฆฌ๋ฉฐ, RMQ(a,b)๋ฅผ ๊ตฌํ..