dohoon   3년 전

32번 줄과 33번 줄 사이에

fill_n(tree,4*n,make_pair(INT_MAX,0)); 구문을 넣지 않았는데도 맞는 이유는 뭘까요?

저렇게 항등원으로 초기화가 안 되어있으면 업데이트에서 새로운 원소가 다 먹히게 될 것 같은데... 왜 맞는거죠?

wider93   3년 전

빈 원소가 하나라도 있으면 그렇게 되는데, 33번 줄 루프가 끝난 시점에서는 n개의 끝 노드가 모두 차있게 되고, 

n-1개의 중간 노드들은 어차피 양쪽이 다 차있는 상태에서 한 번씩은 업데이트가 진행된 상태로 남는 것 같네요

dohoon   3년 전

아 곰곰히 생각해보니 그렇네요!

33번 줄 루프 내에서 이미 다 업데이트가 되는 것인데, 그 과정이 다음과 같겠군요!

임의의 중간노드는 자식노드 2개의 재귀 호출에 의해서 업데이트 될 수 있는데, 앞 자식 노드에서는 작동하지 않지만, 뒤 자식 노드에 의해 결정적으로 업데이트 되기 때문에 정당해지는 신기한 상황이군요.

그래도 되게 불안정한 상태이니 fill을 쓰거나 build로 역으로 짜나가는 방식을 써야하겠네요

댓글을 작성하려면 로그인해야 합니다.