83tachyon   3년 전

세그먼트 트리 활용하여 풀었습니다. 하단 코드에 코멘트 넣었습니다.

세그트리의 사이즈 절반이 되는 지점부터 1을 넣어 dvd의 위치를 표시하였고,

그 dvd가 맨 위로 올라갈 때마다 처음 자리에 0으로 바꿔주고 새 위치에 1을 넣었습니다.

그리고 이번에 보려고 하는 dvd의 위치에서부터 맨 뒤까지를 구간으로 잡아 sum함수를 돌리고

마지막에 자기자신을 빼서(-1) 답을 구하는 방식입니다.

질문검색 게시판에서 테케 사이트 찾게되어 테케 파일을 돌려보았습니다.

그냥 통째로 돌리면 몇개 돌다가 중간에 bus error / segmentation fault 에러가 발생하고,

혹시 그 테케가 잘못된 건가 싶어서 따로 빼서 돌려보면 또 잘 돌아갑니다.

그 이후의 테케들을 모두 모아서 한꺼번에 돌리면 또 몇개 가다가 같은 에러가 발생합니다.

제 혼자만의 추측은 테케에서 다음 테케로 가는 과정에서 뭔가 리셋이 제대로 안되고 있다는 느낌인데,

확실하지 않구요. 어떤게 문제인지 가늠이 안됩니다.

고수분들의 도움이 절실합니다. ㅠㅠ

djm03178   3년 전

sz가 초기화되지 않아서, 이미 충분한 크기인데도 강제로 2배가 추가될 수 있어 보입니다.

83tachyon   3년 전

djm03178 님 안녕하세요

그간 공부하면서 많은 문제들의 질문 게시판에서 계속 은혜를 입고 있었습니다.

너무나 빠른 답변 감사드립니다. sz초기화 찾아주셔서 감사합니다. 덕분에 AC 받았습니다. ㅠㅠ

한가지 더 여쭤보고 싶은 점이 있습니다

예를 들어, n=15일 때, 균형포화이진트리(?)형태의 세그트리 구성을 위해 15보다 살짝 큰 사이즈 16을 쓴다면

세그트리 구성이 불가능함이 자명합니다. 그래서 저는 while루프를 나오고나서 2배를 한번 더 해주었습니다.

이러한 방식의 세그트리 구성이 괜찮은건가요?

균형포화이진트리를 구성하면 sum함수 호출등의 쿼리를 수행할때 항상 전범위로 잡아주면 되기때문이라고 생각하고 있습니다.

djm03178   3년 전

그 방법을 실제로 비재귀 세그트리에서 사용합니다. 유효하지 않은 인덱스에 대한 처리만 잘 해주신다면 문제 없습니다.

83tachyon   3년 전

비재귀 세그트리가 무엇인지 따로 더 공부해야 하겠군요.

말씀 감사드립니다!

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