opop20207   4년 전

10만개의 덱을 활용해서 back-front값을 평방분할해 저장해놓는 방식으로 진행했고, 모스 알고리즘을 사용했습니다.

각 쿼리들도 평방분할해 정렬했습니다.


덱에 넣을때 check[(back-front)]와 check_group[(back-front)/sqrtK]를 1씩 늘려주고, 덱에서 뺄때는 1씩 줄여줍니다.

모스 알고리즘의 한 과정이 끝나면 check_group이 0이 아닌 가장 큰 값을 가져오고, 그 그룹 노드에서 리프노드로 들어가 가장 큰 리프노드를 가져옵니다.

이과정을 M번 진행합니다.

시간 초과가 납니다.

어느 부분을 개선해야 시간초과가 나지 않을지 모르겠습니다. 도움 주시면 감사하겠습니다.

djm03178   4년 전

저의 경우에는 std::deque을 사용한 것이 시간 초과가 나서 덱을 크기 고정 배열로 직접 구현하였더니 1초 정도에 통과가 됐습니다. 실제로 std::deque의 구현체는 임의로 크기를 늘리고 앞뒤로 삽입하는 등의 연산을 모두 지원하기 위해 꽤 무거운 구조를 사용한다고 합니다.

golazcc83   3년 전

신기하네요.. c++에서 deque로 구현했을 땐 시간 초과가 났는데 deque를 list로만 바꾸면 통과가 되네요

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