DOJ logoDOJ
문제
최근 추가된 문제들저장한 문제
카테고리DLC대회그룹팀게시판
랭킹
문제 풀이 랭킹스트릭 랭킹DOJ Power 랭킹
현황
문제 제안로그인회원가입
DOJ logoDOJ

OI 서브태스크 채점, Elo 레이팅, Discord 인증을 갖춘 커뮤니티 온라인 저지.

문제
문제 목록카테고리
커뮤니티
대회랭킹게시판공지사항외부 대회 개최이용 안내
계정
로그인회원가입채점 현황
정책
이용약관DLC 이용 규칙개인정보 처리방침API 사용 설명서언어별 채점 환경대회 순위 보상레이팅과 퍼포먼스
© 2026 DOJ
모든 권리 보유
해설

농작물 수확

문제로 돌아가기

해설

씨앗들을 좌표의 오름차순으로 정렬하자. 정렬된 jjj번 씨앗이 원래 pjp_jpj​번 씨앗이었다고 하자. 즉, pjp_jpj​는 그 씨앗을 수확할 수 있는 날짜이다.

수확하기로 선택한 씨앗들만 좌표 순서대로 보자. 이들의 날짜는 반드시 어떤 한 지점을 기준으로 엄격히 감소하다가 엄격히 증가하는 형태여야 한다.

선택한 씨앗 중 가장 이른 날에 수확하는 씨앗을 중심 씨앗이라 하자. 중심 씨앗보다 왼쪽에 있는 선택된 씨앗들을 좌표가 증가하는 순서로 보면 날짜는 엄격히 감소해야 한다. 그렇지 않으면 더 왼쪽에 있으면서 더 이른 날에 수확하는 씨앗으로 이동할 때, 그 사이에 있는 아직 수확되지 않은 선택된 씨앗을 밟게 된다.

같은 이유로 중심 씨앗보다 오른쪽에 있는 선택된 씨앗들의 날짜는 좌표가 증가하는 순서로 엄격히 증가해야 한다.

반대로 날짜가 엄격히 감소하다가 엄격히 증가하는 형태인 씨앗들을 선택하면 모두 수확할 수 있다. 중심 씨앗을 처음 수확한 뒤, 날짜 순서대로 볼 때 다음 씨앗은 이미 수확한 구간의 왼쪽 바깥 또는 오른쪽 바깥에 있는 가장 가까운 선택된 씨앗이다. 따라서 이동 경로에 아직 수확되지 않은 선택된 씨앗이 없다.

결국 문제는 좌표 순서로 놓인 수열

p1,p2,⋯ ,pNp_1,p_2,\cdots,p_Np1​,p2​,⋯,pN​

에서 가치 wpjw_{p_j}wpj​​를 가진 원소들을 골라, 날짜가 엄격히 감소하다가 엄격히 증가하는 부분수열의 가치 합을 최대화하는 문제가 된다.

LjL_jLj​를 jjj번 위치를 마지막 원소로 하는 엄격히 감소하는 부분수열의 최대 가치 합이라 하자. 그러면

Lj=wpj+max⁡k<j, pk>pjLkL_j=w_{p_j}+\max_{k<j,\ p_k>p_j}L_kLj​=wpj​

이다.

RjR_jRj​를 jjj번 위치를 첫 원소로 하는 엄격히 증가하는 부분수열의 최대 가치 합이라 하자. 그러면

Rj=wpj+max⁡k>j, pk>pjRkR_j=w_{p_j}+\max_{k>j,\ p_k>p_j}R_kRj​=wpj​

이다.

두 식 모두 현재 날짜 pjp_jpj​보다 큰 날짜 구간의 최댓값이 필요하다. 날짜는 111부터 NNN까지의 서로 다른 정수이므로 세그먼트 트리를 날짜에 대해 만들면 된다.

LjL_jLj​는 왼쪽에서 오른쪽으로 계산한다. 세그먼트 트리에서 구간 (pj,N](p_j,N](pj​,N]의 최댓값을 구한 뒤 pjp_j 위치를 로 갱신한다.

RjR_jRj​는 오른쪽에서 왼쪽으로 같은 방식으로 계산한다.

jjj번 씨앗을 중심으로 하는 최적의 답은

Lj+Rj−wpjL_j+R_j-w_{p_j}Lj​+Rj​−wp

이다. 중심 씨앗의 가치가 두 번 더해졌으므로 한 번 빼야 한다.

모든 jjj에 대한 최댓값이 정답이다. 좌표 정렬과 세그먼트 트리 연산이 필요하므로 시간 복잡도는 O(Nlog⁡N)O(N\log N)O(NlogN)이고, 메모리 복잡도는 O(N)O(N)O(N)이다.

모든 가치는 양수이므로 답은 모든 씨앗 가치의 합을 넘지 않는다. 따라서

answer≤N⋅109≤2⋅1014\text{answer}\leq N\cdot10^9\leq2\cdot10^{14}answer≤N⋅109≤2⋅1014

이고 항상 부호 있는 646464비트 정수 범위에 들어간다.

Solution written by GPT5.6

​
+
k<j, pk​>pj​max​Lk​
​
+
k>j, pk​>pj​max​Rk​
pj​
LjL_jLj​
j​
​