ps:problems:boj:32683
목차
Up and Down
| ps | |
|---|---|
| 링크 | acmicpc.net/… |
| 출처 | BOJ |
| 문제 번호 | 32683 |
| 문제명 | Up and Down |
| 레벨 | 골드 1 |
| 분류 |
가장 긴 증가하는 부분 수열 |
| 시간복잡도 | O(t * nlogn) |
| 인풋사이즈 | t<=5*10^4, n<=2*10^5, t*n<=5*10^5 |
| 사용한 언어 | Python 3.13 |
| 제출기록 | 58520KB / 240ms |
| 최고기록 | 240ms |
| 해결날짜 | 2026/01/11 |
풀이
- 가장 긴 바이토닉 부분 수열 과 같은 문제인데, 증가하는 구간과 감소하는 구간이 반드시 둘다 존재해야 한다는 점만 다르다. 기본 풀이는 가장 긴 바이토닉 부분 수열 를 참고하고, 여기에 증가하는 구간과 감소하는 구간이 존재하도록 확인하는 조건문만 추가해주면 된다
- 시간복잡도는 O(nlogn)
코드
"""Solution code for "BOJ 32683. Up and Down".
- Problem link: https://www.acmicpc.net/problem/32683
- Solution link: http://www.teferi.net/ps/problems/boj/32683
Tags: [lis]
"""
import sys
from teflib import psutils
from teflib import seqtask
@psutils.run_n_times
def main():
_N = int(sys.stdin.readline())
a = [int(x) for x in sys.stdin.readline().split()]
lis_lengths = seqtask.longest_inc_subseq_length_by_last_elem(a)
lds_lengths = seqtask.longest_dec_subseq_length_by_first_elem(a)
answer = 0
for lis_len, lds_len in zip(lis_lengths, lds_lengths):
if lis_len > 1 and lds_len > 1:
answer = max(answer, lis_len + lds_len - 1)
print(answer)
if __name__ == '__main__':
main()
- Dependency
ps/problems/boj/32683.txt · 마지막으로 수정됨: 2026/01/17 15:36 저자 teferi

토론