| 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 |
"""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()