너비 w인 한 구간의 모든 막대 높이를 h 이상으로 만들 수 있는지 생각하자. 이 구간에는 B에서 가장 큰 w개만 쓰면 충분하다. 구간의 A를 오름차순, 선택한 B를 내림차순으로 짝지었을 때 모든 합이 h 이상이면 가능하고, 그렇지 않으면 어떤 짝짓기도 불가능하다.
각 Ai에 대해 Ai+Bj≥h를 만족하는 Bj의 개수를 ri라 하자. 길이 w인 구간의 ri들을 오름차순으로 정렬한 값을 r(1),⋯,r(w)라 하면 가능할 필요충분조건은 모든 k에 대해 r(k)≥k인 것이다.
슬라이딩 윈도우에서 ri의 빈도를 관리한다. Dk=#{i:ri≤k}−k라 두면 조건은 모든 Dk≤0이다. 값 cnt0,cnt1−1,⋯,cntw−1의 최대 접두사 합을 저장하는 세그먼트 트리를 사용하면 원소 추가와 삭제, 조건 확인을 각각 O(logN)에 할 수 있다.
각 너비 w에 대해 가능한 최대 높이 h를 이분 탐색하고 wh의 최댓값을 취한다. 시간 복잡도는 O(N2logNlogV)이다.