๐ก ์กฐ๊ฑด
- ๋
ธ๋๋ ์ํ N๊ฐ๋ก ๊ตฌ์ฑ๋๋ฉฐ, i ๋ฒ์งธ ์ํ๋ B_i ๋นํธ๋์ ์ง์๋๋ค.
N(1 <= N <= 50,000), B_i(1 <= B_i <= 10,000)
์ด๋ค ๋
ธ๋๋ 5์ต ๋นํธ ๋ณด๋ค ๊ธธ์ง ์๋ค.
- 0์์ ๋
ธ๋๋ฅผ ์ฐ์ฃผํ๊ธฐ ์์ํ๋ฉฐ, 0์์๋ถํฐ B_1 ์ ๊น์ง ์ํ 1๊ฐ, ์๊ฐ B_1์์ B_1 + B_2 ์ง์ ๊น์ง ์ํ 2๊ฐ๋ฅผ ์ฐ์ฃผํ๋ค.
- T ์๊ฐ๋ถํฐ T+1 ์ง์ ๊น์ง์ ๊ฐ๊ฒฉ์์ ์ด๋ค ์ํ๋ฅผ ์ฐ์ฃผํด์ผํ๋์ง ๊ตฌํ๋ ๋ฌธ์ .
- ์ง๋ฌธ์ ๊ฐ์๋ Q๊ฐ๊ฐ ์๋ค.
Q(1 <= Q <= 50,000)
- ์ง๋ฌธ์ T_i(0 <= T_i <= end_of_song)์ผ๋ก ์ ๊ณต๋๋ค.
- ์ด๋ถํ์ ์๊ณ ๋ฆฌ์ฆ ์ ํ์ ๋ฌธ์
๐ฅ ์์ค ์ฝ๋
from sys import stdin
n, m = map(int, stdin.readline().split())
nums = []
now = 0
def solve(start, end, target):
while end > start:
mid = (start + end) // 2
if nums[mid] < target:
start = mid + 1
else:
end = mid
return end
for _ in range(n):
count = int(stdin.readline())
nums.append(now + count - 1)
now += count
nums.append(int(1e12))
for _ in range(m):
j = int(stdin.readline())
it = solve(0, len(nums), j)
print(it + 1)
๐ ์์ ๋ฐ ์คํ๊ฒฐ๊ณผ
์์
3 5
2
1
3
2
3
4
0
1
์คํ๊ฒฐ๊ณผ
2
3
3
1
1
โจ๏ธ ๋ฌธ์ ํ์ด
- ๋
ธํธ๋ฅผ ์ ์ฅํ ๋, ํด๋น ๋
ธํธ์ ๋ฒ์ X๊ฐ (a <= X < b)์ ํด๋นํ๋ค๋ฉด, ์ต๋๊ฐ (b-1)๋ง ์ ์ฅํ๋ค.
- T_i ๋ถ๋ถ์์ ์ด๋ถํ์์ ์ฌ์ฉํ๋ค.
์ด๋ถ ํ์์ ์ฌ์ฉํ์ฌ ๋์จ end ๊ฐ์์ +1 ์ ํด์ฃผ๊ณ ์ถ๋ ฅํ๋ฉด ๋๋ค.
๐พ ๋ฐฐ์ด์
- ์ด๋ถํ์์ ํตํด์ ํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ ๋ชปํ ๊ฒ ๊ฐ๋ค.
- ์์ด๋ก ๋ ๋ฌธ์ ์ ์ง๋ฌธ์ ํด์ํด ๋ฌธ์ ๋ฅผ ํ์ดํ๋๋ฐ ์์ด์ ์ด๋ ค์์ ๊ฒช์๋ค.