부분수열 갱신
시간 제한1.5초메모리 제한2048 MB
배열과 구간 [l,r]이 주어질 때, 부분수열 하나를 정확히 한 번 뒤집어 구간 합의 최솟값을 구합니다.
문제
Little John이 숙모에게서 확장 나사를 수백 번 빌렸는데, 결국 숙모가 쓰지 않는 나사를 돌려받으러 오기로 했다.
나사는 집 설계에서 중요한 부품이라서, Little John은 아무도 닿을 수 없는 곳, 즉 친환경 목재 化粧판 아래에 나사를 숨기기로 했다.
정수 수열 과 구간 ()이 주어진다.
이 수열에 대해 다음 연산을 정확히 한 번 수행해야 한다.
- 수열 의 임의의 부분수열을 골라 뒤집는다. 부분수열은 연속일 필요가 없다.
형식적으로는 을 만족하는 임의의 인덱스 를 고른다. 그다음 모든 에 대해 번째 원소를 번째 원소의 원래 값으로 동시에 바꾼다.
연산 후 의 최솟값을 구하라.
입력
각 테스트는 여러 개의 테스트 케이스로 이루어진다. 첫 줄에 테스트 케이스의 수 ()가 주어진다.
각 테스트 케이스의 첫 줄에는 세 정수 , , ()이 주어진다. 은 의 길이이고 은 구간이다.
둘째 줄에는 정수 ()이 주어진다.
모든 테스트 케이스의 합은 를 넘지 않는다.
출력
각 테스트 케이스마다 의 최솟값을 한 줄에 출력한다.
힌트
두 번째 테스트 케이스에서 이고 구간은 이다. 부분수열 을 골라 뒤집으면 수열은 이 된다. 그러면 은 이 된다. 합의 최솟값이 임을 보일 수 있다.