hckim96   3년 전

시간 복잡도가 Q * K * (최대 값 구하기) 인데 

2차원 세그먼트 트리를 이용하면 N * M 행렬에서 사각 구간에서 최대값을 구하는 데 걸리는 시간은  O( logN * logM ) 이므로

전체 시간 복잡도가  log25  * 108  가 나와서 해봤지만 시간 초과가 납니다.

어떤 부분을 고쳐야 할까요?

slah007   3년 전

제 풀이가 맞는지는 모르겠지만

하루씩 지남에 따라 겹치는 부분이 아주 많음을 이용하면 될 것 같습니다.

1D segment tree로 한 행 또는 열의 max는 빠르게 구할 수 있고, 총 K+N-1개의 행에 대해 각각의 최댓값을 구한 뒤

set 등을 써서 처음에 N개를 push하고 그 중 최댓값, 그 다음날은 하나를 set.erase 하고 그 중 최댓값, ... 이를 반복하면 될 것 같습니다.

QK (log N(미리 N+K-1개 행의 max 구함) + log N(set의 연산 총 K번)) = QK log N이 됩니다.

slah007   3년 전

저도 막 풀어봤는데 계속 시간초과나서 원인을 보니까, N개 수가 있고 D개씩 보면서(1~D번째 -> 2~(D+1)번째 -> ...) D개 중 최댓값 구하는게 multiset을 쓰지 않고 deque나 list를 쓰면 선형 시간에 되네요 ㄷㄷ

hckim96   3년 전

덱 내의 최대값들의 개수를 유지시키면서 구간을 이동시켰을 때 그 덱 내에서 최대값을 구한다는 말씀인가요??

slah007   3년 전

https://sbrus1213.tistory.com/...

https://seunghyun-ant.tistory....

sliding window로 된다네요 읽어보세요

hckim96   3년 전

감사합니다!

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