문제 링크
- http://icpc.me/18587
사용 알고리즘
- 세그먼트 트리
- DP
시간복잡도
- $O(N \sqrt N \log N)$
풀이
입력이 랜덤으로 주어집니다. 이 조건을 잘 이용해봅시다.
수를 하나씩 추가하는 것이 아니라 반대로 하나씩 제거한다고 생각해봅시다.
처음에 LIS를 구해놓은 다음, LIS를 구성하는 원소가 제거되는 경우 다시 LIS를 구하는 방식을 생각해볼 수 있습니다. 이때 LIS는 (원본 순열의 LIS의 길이)번 구하게 됩니다.
무작위로 구성된 순열에서 LIS의 기댓값은 $O(\sqrt N)$입니다. LIS는 $O(N \log N)$에 구할 수 있으므로 전체 시간 복잡도는 $O(N \sqrt N \log N)$이 됩니다.
전체 코드
1 |
|