문제 링크
- http://icpc.me/13050
사용 알고리즘
- Segment Tree
풀이
각 b[i]마다, b[i]보다 작거나 같은 원소들만 a 배열에 남겨놓은 다음에 a배열에서 합이 최대인 subarray를 고를 것 입니다.
합이 최대인 subarray의 합을 세그먼트 트리로 구한다고 합시다. b[i]보다 작은 원소들만 남겨놓는 작업을 효율적으로 처리해야 합니다.
b[i]를 오름차순으로 정렬을 한 다음에 오프라인으로 처리를 하면, a의 각 원소는 세그먼트 트리에 최대 1번만 들어가고 세그먼트 트리에서 나오는 일은 없습니다.
그러므로 update는 최대 n번, query는 최대 m번 발생하기 때문에 O((n+m) log n)에 해결할 수 있습니다.
전체 코드
1 |
|