| ์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- ๋ถ๊ฝ๋ฐ์ดํฐ์
- ALTERTABLE
- SQLDDL
- CREATETABLE
- ํ
- sklearn
- ํค ์ข ๋ฅ
- ๋ฌธ์์ด
- ์ธ๋๋ณ๊ฐ๋น์ง์ปฌ๋ ํฐ
- Key ์ข ๋ฅ
- ๋ฌด๊ฒฐ์ฑ์ ์ง
- ์ปจํ ์ด๋๊ฐ์ฒด
- ์๊ณ ๋ฆฌ์ฆ
- ๋ฌด๊ฒฐ์ฑ
- ์ฃผ์ฑ๋ถ ์ฐพ๊ธฐ
- ์ฌ์ดํท๋ฐ
- ๋ฌด๊ฒฐ์ฑ์ ์ง๋ฉ์ปค๋์ฆ
- knn_classify
- Python
- latent factor model
- ๋ฐฑ์ค
- ํ์ด์ฌ
- ํด๋ฆฐ์ฝ๋
- ์ ์ฌ์์๋ชจ๋ธ
- Hyperlink Graphs
- RENAMETABLE
- latent factor
- TDD
- DROPTABLE
- SQL
- Today
- Total
DonHurry
[Python] ๋ฐฑ์ค 2042๋ฒ - ๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ ๋ณธ๋ฌธ
๐ ๋ฌธ์
2042๋ฒ: ๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ
์ฒซ์งธ ์ค์ ์์ ๊ฐ์ N(1 ≤ N ≤ 1,000,000)๊ณผ M(1 ≤ M ≤ 10,000), K(1 ≤ K ≤ 10,000) ๊ฐ ์ฃผ์ด์ง๋ค. M์ ์์ ๋ณ๊ฒฝ์ด ์ผ์ด๋๋ ํ์์ด๊ณ , K๋ ๊ตฌ๊ฐ์ ํฉ์ ๊ตฌํ๋ ํ์์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋์งธ ์ค๋ถํฐ N+1๋ฒ์งธ ์ค
www.acmicpc.net
๐ ํ์ด
์ธ๊ทธ๋จผํธ ํธ๋ฆฌ๋ฅผ ํ์ฉํ๋ ๋ํ์ ์ธ ๋ฌธ์ ์ ๋๋ค. ์ธ๊ทธ๋จผํธ๋ฅผ ์ฒ์ ์ ํ๋ ๋ถ๋ค์ ์๋ ๋ธ๋ก๊ทธ์ ๊ฐ๋ ๊ณผ ์ฝ๋ ์ค๋ช ์ด ์๋์ด ์์ผ๋ ์ฐธ๊ณ ๋ถํ๋๋ฆฝ๋๋ค.
[์๋ฃ๊ตฌ์กฐ] ์ธ๊ทธ๋จผํธ ํธ๋ฆฌ (Segment Tree)
์ธ๊ทธ๋จผํธ ํธ๋ฆฌ(Segment Tree)๋?
velog.io
์ ๋ธ๋ก๊ทธ์์ ๊ฐ๋ ๊ณผ ์ฝ๋๋ฅผ ๋ณด๊ณ ์ค์ จ๋ค๋ฉด, ํด๋น ๋ฌธ์ ๋ ์ด๋ ต์ง ์๊ฒ ํ ์ ์์ต๋๋ค. ์ธ๊ทธ๋จผํธ ํธ๋ฆฌ๋ฅผ ๋ง๋ค์ด์ฃผ๋ ํจ์, ์ธ๊ทธ๋จผํธ ํธ๋ฆฌ์ ์์๋ฅผ ์ ๋ฐ์ดํธ ํ๋ ํจ์, ๊ตฌ๊ฐ์ ํฉํ๋ ํจ์ 3๊ฐ์ง๋ก ๊ตฌ์ฑํ๋ฉด ๋ฉ๋๋ค.
์๋ ์ฝ๋์์ ์ฃผ์ํ ์ ์ ํธ๋ฆฌ๋ฅผ ์ ๋ฐ์ดํธํ ํ์, ๊ธฐ์กด ๋ฐฐ์ด๋ ์ ๋ฐ์ดํธ ํด์ฃผ์ด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค.
๐ป ์ฝ๋
import sys
input=sys.stdin.readline
# start, end: ์ซ์ ๋ฐฐ์ด์ ์ธ๋ฑ์ค
# idx: ์ธ๊ทธ๋จผํธ ํธ๋ฆฌ์ ์ธ๋ฑ์ค (1๋ถํฐ)
def make_tree(start, end, idx):
if start == end:
tree[idx] = arr[start]
return tree[idx]
mid = (start + end) // 2
tree[idx] = make_tree(start, mid, idx * 2) + make_tree(mid + 1, end, idx * 2 + 1)
return tree[idx]
# target: ์์ ํ ๊ฐ์ ์ซ์ ๋ฐฐ์ด ์ธ๋ฑ์ค
# value: ์์ ํ ๊ฐ (๊ธฐ์กด ๊ฐ์ ์ผ๋งํผ ๋ํด์ผ ํ๋์ง์ ๊ฐ)
def update_tree(start, end, idx, target, value):
if target < start or target > end:
return
tree[idx] += value
if start == end:
return
mid = (start + end) // 2
update_tree(start, mid, idx * 2, target, value)
update_tree(mid + 1, end, idx * 2 + 1, target, value)
# left, right: ๊ตฌํ๊ณ ์ ํ๋ ๋ฒ์
def sum_tree(start, end, idx, left, right):
if right < start or left > end:
return 0
if left <= start and right >= end:
return tree[idx]
mid = (start + end) // 2
return sum_tree(start, mid, idx * 2, left, right) + sum_tree(mid + 1, end, idx * 2 + 1, left, right)
N, M, K = map(int, input().split())
arr = []
tree = [0] * (N * 4) # ์ถฉ๋ถํ ํธ๋ฆฌ ๊ณต๊ฐ ํ๋ณด
for _ in range(N):
arr.append(int(input()))
make_tree(0, N-1, 1)
for _ in range(M + K):
a, b, c = map(int, input().split())
if a == 1:
update_tree(0, N-1, 1, b-1, c - arr[b-1])
arr[b-1] = c # ๊ธฐ์กด ์ซ์ ๋ฐฐ์ด ๊ฐ ๋ณ๊ฒฝ
else:
print(sum_tree(0, N-1, 1, b-1, c-1))'Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Python] ๋ฐฑ์ค 17609๋ฒ - ํ๋ฌธ (2) | 2024.01.31 |
|---|---|
| [Python] ๋ฐฑ์ค 1305๋ฒ - ๊ด๊ณ (0) | 2024.01.24 |
| [Python] ๋ฐฑ์ค 2133๋ฒ - ํ์ผ ์ฑ์ฐ๊ธฐ (0) | 2024.01.22 |
| [Python] ๋ฐฑ์ค 14891๋ฒ - ํฑ๋๋ฐํด (0) | 2024.01.21 |
| [Python] ๋ฐฑ์ค 14499๋ฒ - ์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐ (0) | 2024.01.20 |