[๋ฌธ์ ํด๊ฒฐ๊ธฐ๋ฒ] 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..