CF2029C New Rating

题目描述

你好,Codeforces Forcescode! Kevin 曾经是 Codeforces 的参赛者。最近,KDOI 团队开发了一个新的在线评测系统,名为 Forcescode。 Kevin 在 Forcescode 上参加了 $n$ 场比赛。在第 $i$ 场比赛中,他的表现分数为 $a_i$。 现在他已经入侵了 Forcescode 的后台,并将选择一个区间 $[l, r]$($1 \le l \le r \le n$),然后跳过该区间内的所有比赛。之后,他的评分将按照以下方式重新计算: - 初始时,他的评分为 $x=0$; - 对于每个 $1 \le i \le n$,在第 $i$ 场比赛后, - 如果 $l \le i \le r$,则跳过该场比赛,评分保持不变; - 否则,按照以下规则更新评分: - 如果 $a_i > x$,则他的评分 $x$ 增加 $1$; - 如果 $a_i = x$,则评分 $x$ 保持不变; - 如果 $a_i < x$,则评分 $x$ 减少 $1$。 你需要帮助 Kevin,在他最优选择区间 $[l, r]$ 的情况下,求出重新计算后他可能获得的最大评分。注意,Kevin 必须至少跳过一场比赛。

输入格式

每个测试用例包含多组数据。输入的第一行包含一个整数 $t$($1 \le t \le 5 \cdot 10^4$),表示测试用例的组数。接下来是每组测试用例的描述。 每组测试用例的第一行包含一个整数 $n$($1 \le n \le 3 \cdot 10^5$),表示比赛场数。 第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($1 \le a_i \le n$),表示每场比赛的表现分数。 保证所有测试用例中 $n$ 的总和不超过 $3 \cdot 10^5$。

输出格式

对于每组测试用例,输出一个整数,表示 Kevin 在最优选择区间后重新计算可能获得的最大评分。

说明/提示

在第一个测试用例中,Kevin 必须至少跳过一场比赛。如果他选择任意长度为 $1$ 的区间,他重新计算后的评分将等于 $5$。 在第二个测试用例中,Kevin 的最优选择是区间 $[3, 5]$。重新计算时,他的评分变化如下: $$ 0 \xrightarrow{a_1 = 1} 1 \xrightarrow{a_2 = 2} 2 \xrightarrow{\mathtt{skip}} 2 \xrightarrow{\mathtt{skip}} 2 \xrightarrow{\mathtt{skip}} 2 \xrightarrow{a_6 = 3} 3 \xrightarrow{a_7 = 4} 4 $$ 在第三个测试用例中,Kevin 必须跳过唯一的一场比赛,因此评分将保持初始值 $0$。 在第四个测试用例中,Kevin 的最优选择是区间 $[7, 9]$。重新计算时,他的评分变化如下: $$ 0 \xrightarrow{a_1 = 9} 1 \xrightarrow{a_2 = 9} 2 \xrightarrow{a_3 = 8} 3 \xrightarrow{a_4 = 2} 2 \xrightarrow{a_5 = 4} 3 \xrightarrow{a_6 =4 } 4 \xrightarrow{\mathtt{skip}} 4 \xrightarrow{\mathtt{skip}} 4 \xrightarrow{\mathtt{skip}} 4 $$ 在第五个测试用例中,Kevin 的最优选择是区间 $[5, 9]$。 由 ChatGPT 4.1 翻译