Skip to content

Conversation

@oncsr
Copy link
Contributor

@oncsr oncsr commented Aug 20, 2025

🧷 문제 링크

https://www.acmicpc.net/problem/19651

🧭 풀이 시간

240분

👀 체감 난이도

✏️ 문제 설명

길이 N인 수열 A가 있다.
두 가지 쿼리를 처리해보자.

  1. 구간 [i,j]에 초항이 x, 공차가 y인 등차수열 더하기
  2. 구간 [i,j]에서의 연속 부분 수열 중 등차수열의 최대 길이

🔍 풀이 방법

  • 느리게 갱신되는 세그먼트 트리

B[i] = A[i] - A[i-1]로 정의하고 이 B 배열로 세그먼트 트리를 구성하면, 1번 쿼리가 단순히 구간 덧셈 쿼리로 변한다.
구체적으로 쿼리 (1, i, j, x, y)가 다음과 같이 변함.

  • B[i]에 x 더하기
  • B[i+1]부터 B[j]까지 y 더하기
  • B[j+1]에 x + (j-i)*y 빼기

위 작업들을 모두 세그먼트 트리에서 레이지 배열로 처리하고, 2번 쿼리는 구조체를 정의해서 세그먼트 트리의 노드로 넣어 처리했다.

구조체 Node에 포함되는 값은

  1. 구간 길이
  2. 이 구간에서의 가장 왼쪽 원소
  3. 이 구간에서의 가장 오른쪽 원소
  4. 이 구간에서 가장 왼쪽 원소를 포함하는 최대 등차수열 길이
  5. 이 구간에서 가장 오른쪽 원소를 포함하는 최대 등차수열 길이
  6. 이 구간에서의 최대 등차수열 길이

이렇게 정의하고 세그먼트 트리에서 하위 두 노드를 합치는 함수를 만들어줬다.

⏳ 회고

레이지 배열 안 쓰는 업데이트 함수를 지우니까 맞음. 뭐지????

@oncsr oncsr self-assigned this Aug 20, 2025
@oncsr oncsr added success 👍 해설을 보지 않고 풀었을 때 timeout ⌚ 목표 시간보다 오래걸렸을 때 labels Aug 20, 2025
@ShinHeeEul ShinHeeEul merged commit 295f4bb into main Aug 20, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

success 👍 해설을 보지 않고 풀었을 때 timeout ⌚ 목표 시간보다 오래걸렸을 때

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants