CF1385C.Make It Good

普及-

通过率:0%

时间限制:1.00s

内存限制:256MB

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

You are given an array aa consisting of nn integers. You have to find the length of the smallest (shortest) prefix of elements you need to erase from aa to make it a good array. Recall that the prefix of the array a=[a1,a2,…,an]a=[a_1, a_2, \dots, a_n] is a subarray consisting several first elements: the prefix of the array aa of length kk is the array [a1,a2,…,ak][a_1, a_2, \dots, a_k] (0≤k≤n0 \le k \le n).

The array bb of length mm is called good, if you can obtain a non-decreasing array cc (c1≤c2≤⋯≤cmc_1 \le c_2 \le \dots \le c_{m}) from it, repeating the following operation mm times (initially, cc is empty):

  • select either the first or the last element of bb, remove it from bb, and append it to the end of the array cc.

For example, if we do 44 operations: take b1b_1, then bmb_{m}, then bm−1b_{m-1} and at last b2b_2, then bb becomes [b3,b4,…,bm−3][b_3, b_4, \dots, b_{m-3}] and c=[b1,bm,bm−1,b2]c =[b_1, b_{m}, b_{m-1}, b_2].

Consider the following example: b=[1,2,3,4,4,2,1]b = [1, 2, 3, 4, 4, 2, 1]. This array is good because we can obtain non-decreasing array cc from it by the following sequence of operations:

  1. take the first element of bb, so b=[2,3,4,4,2,1]b = [2, 3, 4, 4, 2, 1], c=[1]c = [1];
  2. take the last element of bb, so b=[2,3,4,4,2]b = [2, 3, 4, 4, 2], c=[1,1]c = [1, 1];
  3. take the last element of bb, so b=[2,3,4,4]b = [2, 3, 4, 4], c=[1,1,2]c = [1, 1, 2];
  4. take the first element of bb, so b=[3,4,4]b = [3, 4, 4], c=[1,1,2,2]c = [1, 1, 2, 2];
  5. take the first element of bb, so b=[4,4]b = [4, 4], c=[1,1,2,2,3]c = [1, 1, 2, 2, 3];
  6. take the last element of bb, so b=[4]b = [4], c=[1,1,2,2,3,4]c = [1, 1, 2, 2, 3, 4];
  7. take the only element of bb, so b=[]b = [], c=[1,1,2,2,3,4,4]c = [1, 1, 2, 2, 3, 4, 4] — cc is non-decreasing.

Note that the array consisting of one element is good.

Print the length of the shortest prefix of aa to delete (erase), to make aa to be a good array. Note that the required length can be 00.

You have to answer tt independent test cases.

给你一个包含 nn 个整数的数组 aa。你需要找出:为使 aa 成为“好”数组,所需从 aa 中删除的最短前缀的长度。回忆一下,数组 a=[a1,a2,…,an]a=[a_1, a_2, \dots, a_n] 的前缀是指由其若干个起始元素构成的子数组:长度为 kk 的数组 aa 的前缀是数组 [a1,a2,…,ak][a_1, a_2, \dots, a_k](其中 0≤k≤n0 \le k \le n)。

长度为 mm 的数组 bb 被称为好数组,如果可以通过重复执行以下操作 mm 次(初始时 cc 为空数组),从 bb 得到一个非递减数组 cc(即满足 c1≤c2≤⋯≤cmc_1 \le c_2 \le \dots \le c_{m}):

  • 选择 bb 的第一个或最后一个元素,将其从 bb 中移除,并将其追加到数组 cc 的末尾。

例如,若我们执行 4 次操作:依次取 b1b_1、bmb_{m}、bm−1b_{m-1}、b2b_2,则 bb 变为 [b3,b4,…,bm−3][b_3, b_4, \dots, b_{m-3}],而 c=[b1,bm,bm−1,b2]c = [b_1, b_{m}, b_{m-1}, b_2]。

考虑如下例子:b=[1,2,3,4,4,2,1]b = [1, 2, 3, 4, 4, 2, 1]。该数组是好数组,因为我们可以按如下操作序列从它得到非递减数组 cc:

  1. 取 bb 的第一个元素,于是 b=[2,3,4,4,2,1]b = [2, 3, 4, 4, 2, 1],c=[1]c = [1];
  2. 取 bb 的最后一个元素,于是 b=[2,3,4,4,2]b = [2, 3, 4, 4, 2],c=[1,1]c = [1, 1];
  3. 取 bb 的最后一个元素,于是 b=[2,3,4,4]b = [2, 3, 4, 4],c=[1,1,2]c = [1, 1, 2];
  4. 取 bb 的第一个元素,于是 b=[3,4,4]b = [3, 4, 4],c=[1,1,2,2]c = [1, 1, 2, 2];
  5. 取 bb 的第一个元素,于是 b=[4,4]b = [4, 4],c=[1,1,2,2,3]c = [1, 1, 2, 2, 3];
  6. 取 bb 的最后一个元素,于是 b=[4]b = [4],c=[1,1,2,2,3,4]c = [1, 1, 2, 2, 3, 4];
  7. 取 bb 中唯一剩下的元素,于是 b=[]b = [],c=[1,1,2,2,3,4,4]c = [1, 1, 2, 2, 3, 4, 4] —— 此时 cc 是非递减的。

注意:仅含一个元素的数组是好数组。

请输出为使 aa 成为好数组所需删除的最短前缀的长度。注意,该长度可以为 00。

你需要回答 tt 个相互独立的测试用例。

输入格式

The first line of the input contains one integer tt (1≤t≤2⋅1041 \le t \le 2 \cdot 10^4) — the number of test cases. Then tt test cases follow.

The first line of the test case contains one integer nn (1≤n≤2⋅1051 \le n \le 2 \cdot 10^5) — the length of aa. The second line of the test case contains nn integers a1,a2,…,ana_1, a_2, \dots, a_n (1≤ai≤2⋅1051 \le a_i \le 2 \cdot 10^5), where aia_i is the ii-th element of aa.

It is guaranteed that the sum of nn does not exceed 2⋅1052 \cdot 10^5 (∑n≤2⋅105\sum n \le 2 \cdot 10^5).

输入的第一行包含一个整数 tt(1≤t≤2⋅1041 \le t \le 2 \cdot 10^4),表示测试用例的数量。随后是 tt 个测试用例。

每个测试用例的第一行包含一个整数 nn(1≤n≤2⋅1051 \le n \le 2 \cdot 10^5),表示数组 aa 的长度。每个测试用例的第二行包含 nn 个整数 a1,a2,…,ana_1, a_2, \dots, a_n(1≤ai≤2⋅1051 \le a_i \le 2 \cdot 10^5),其中 aia_i 是数组 aa 的第 ii 个元素。

保证所有测试用例中 nn 的总和不超过 2⋅1052 \cdot 10^5(即 ∑n≤2⋅105\sum n \le 2 \cdot 10^5)。

输出格式

For each test case, print the answer: the length of the shortest prefix of elements you need to erase from aa to make it a good array.

对于每个测试用例,输出答案:需要从数组 aa 中删除的最短前缀的长度,使得剩余数组成为一个“好”数组。

输入输出样例

  • 输入#1

    5
    4
    1 2 3 4
    7
    4 3 3 8 4 5 2
    3
    1 1 1
    7
    1 3 1 4 5 3 2
    5
    5 4 3 2 3

    输出#1

    0
    4
    0
    2
    3

说明/提示

In the first test case of the example, the array aa is already good, so we don't need to erase any prefix.

In the second test case of the example, the initial array aa is not good. Let's erase first 44 elements of aa, the result is [4,5,2][4, 5, 2]. The resulting array is good. You can prove that if you erase fewer number of first elements, the result will not be good.

在示例的第一个测试用例中,数组 aa 已经是“好”的,因此我们无需删除任何前缀。

在示例的第二个测试用例中,初始数组 aa 不是“好”的。让我们删除 aa 的前 44 个元素,结果为 [4,5,2][4, 5, 2]。该结果数组是“好”的。可以证明:若删除更少的前导元素,则结果将不是“好”的。

输入解题思路,AI测评打分。不知道怎么写?

首页