Universal Cup Judging System

Universal Cup

시간 제한: 4 s 메모리 제한: 512 MB 총점: 100
통계

당신은 투자 회사의 트레이더이다. 어느 날, 당신은 자신이 거래를 담당하는 주식이 매일 정확히 반복되는 패턴을 따른다는 사실을 발견한다. 하루는 길이가 같은 $n$개의 시간 구간으로 나뉘며, $i$번째 구간 동안의 주가는 항상 $a_i$이다. 어느 날의 $n$번째 구간이 끝나면 다음 날의 첫 번째 구간이 즉시 이어지고, 주가는 $a_n$에서 $a_1$로 바뀐다. 이는 일생에 한 번 있을 기회이다. 이미 알아낸 이 패턴에 맞춰 근무 시간 동안 주식을 사고팔기만 하면, 확실하게 이익을 얻을 수 있다!

당신의 근무 시간은 일정하지 않으며, 한 근무 기간이 자정을 넘길 수도 있다. $q$개의 근무 기간이 주어진다. $i$번째 기간은 시간 구간 $l_i$에서 시작하여 시간 구간 $r_i$에서 끝나며, 양 끝 구간을 모두 포함한다. 시간 순서대로 나열한 구간은 다음과 같다.

  • $l_i \le r_i$이면 $l_i,l_i+1,\ldots,r_i$이다.
  • $l_i > r_i$이면 $l_i,l_i+1,\ldots,n,1,2,\ldots,r_i$이다.

각 근무 기간 동안 최대 $k$번의 거래를 완료할 수 있다. 한 번의 거래는 주식 한 주를 매수한 뒤 나중의 시간 구간에 매도하는 것으로 이루어지며, 이익은 매도 가격에서 매수 가격을 뺀 값이다. 동시에 최대 한 주만 보유할 수 있으므로, 다른 주식을 매수하기 전에 현재 보유한 주식을 매도해야 한다. 모든 매수와 매도는 해당 근무 기간 안에서 이루어져야 하며, 위에서 설명한 시간 순서를 따라야 한다. 거래를 전혀 하지 않아 $0$의 이익을 얻을 수도 있다.

각 근무 기간에 대해 독립적으로, 얻을 수 있는 총이익의 최댓값을 구하여라.

입력

첫째 줄에는 세 정수 $n,k,q$ ($1 \le n \le 10^5$, $1 \le k \le 800$, $1 \le q \le 3 \times 10^5$)가 주어진다. 각각 하루의 시간 구간 수, 근무 기간마다 허용되는 최대 거래 횟수, 근무 기간 수이다.

둘째 줄에는 $n$개의 정수 $a_1,a_2,\ldots,a_n$ ($1 \le a_i \le 10^6$)이 주어진다. $a_i$는 매일 $i$번째 시간 구간의 주가이다.

다음 $q$개 줄에는 각각 두 정수 $l_i,r_i$ ($1 \le l_i,r_i \le n$)가 주어지며, $i$번째 근무 기간을 나타낸다.

이 기간의 시간 구간 수를 $\mathrm{len}_i$라고 하자. $l_i \le r_i$이면 $\mathrm{len}_i=r_i-l_i+1$이고, 그렇지 않으면 $\mathrm{len}_i=n-l_i+1+r_i$이다.

각 근무 기간에 대해 $l_i$와 $\mathrm{len}_i$는 각각 $[1,n]$과 $[\max(1,\lfloor 0.15n \rfloor),\max(1,\lfloor 0.85n \rfloor)]$에서 서로 독립적으로 균등한 확률로 무작위로 생성된다. $r_i$의 값은 $l_i$와 $\mathrm{len}_i$에 의해 유일하게 결정된다. 구체적으로, 구간이 $[1,1]$이면 무작위 생성 결과는 항상 $1$이다.

예제를 제외하고 테스트 케이스는 정확히 50개이다.

출력

$q$개의 줄을 출력한다. $i$번째 줄에는 $i$번째 근무 기간 동안 최대 $k$번의 거래로 얻을 수 있는 최대 이익을 나타내는 정수 하나를 출력한다.

예제

입력 1

6 2 3
3 1 4 1 5 9
2 5
5 2
4 4

출력 1

7
4
0

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.