class Solution:
def shiftingLetters(self, s: str, shifts: List[List[int]]) -> str:
tree, treeSize = [0 for _ in range(2 ** 17)], 2 ** 16
backForth = [25, 1]
for ls, rs, val in shifts:
ls, rs = ls + treeSize, rs + treeSize
while ls < rs:
if ls & 1 == 1: tree[ls] += backForth[val]
if rs & 1 == 0: tree[rs] += backForth[val]
ls, rs = (ls + 1) >> 1, (rs - 1) >> 1
if ls == rs: tree[ls] += backForth[val]
word = list(s)
for i in range(len(word)):
change, start = 0, treeSize + i
while start:
change += tree[start]
start >>= 1
word[i] = chr(ord('a') + ((ord(word[i]) - ord('a') + change) % 26))
return ''.join(word)
비재귀 세그먼트 트리를 기억하고 있는가 테스트..
댓글 영역
획득법
① NFT 발행
작성한 게시물을 NFT로 발행하면 일주일 동안 사용할 수 있습니다. (최초 1회)
② NFT 구매
다른 이용자의 NFT를 구매하면 한 달 동안 사용할 수 있습니다. (구매 시마다 갱신)
사용법
디시콘에서지갑연결시 바로 사용 가능합니다.