CF1385C.Make It Good
普及-
通过率:0%
时间限制:1.00s
内存限制:256MB
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
You are given an array a consisting of n integers. You have to find the length of the smallest (shortest) prefix of elements you need to erase from a to make it a good array. Recall that the prefix of the array a=[a1,a2,…,an] is a subarray consisting several first elements: the prefix of the array a of length k is the array [a1,a2,…,ak] (0≤k≤n).
The array b of length m is called good, if you can obtain a non-decreasing array c (c1≤c2≤⋯≤cm) from it, repeating the following operation m times (initially, c is empty):
- select either the first or the last element of b, remove it from b, and append it to the end of the array c.
For example, if we do 4 operations: take b1, then bm, then bm−1 and at last b2, then b becomes [b3,b4,…,bm−3] and c=[b1,bm,bm−1,b2].
Consider the following example: b=[1,2,3,4,4,2,1]. This array is good because we can obtain non-decreasing array c from it by the following sequence of operations:
- take the first element of b, so b=[2,3,4,4,2,1], c=[1];
- take the last element of b, so b=[2,3,4,4,2], c=[1,1];
- take the last element of b, so b=[2,3,4,4], c=[1,1,2];
- take the first element of b, so b=[3,4,4], c=[1,1,2,2];
- take the first element of b, so b=[4,4], c=[1,1,2,2,3];
- take the last element of b, so b=[4], c=[1,1,2,2,3,4];
- take the only element of b, so b=[], c=[1,1,2,2,3,4,4] — c is non-decreasing.
Note that the array consisting of one element is good.
Print the length of the shortest prefix of a to delete (erase), to make a to be a good array. Note that the required length can be 0.
You have to answer t independent test cases.
给你一个包含 n 个整数的数组 a。你需要找出:为使 a 成为“好”数组,所需从 a 中删除的最短前缀的长度。回忆一下,数组 a=[a1,a2,…,an] 的前缀是指由其若干个起始元素构成的子数组:长度为 k 的数组 a 的前缀是数组 [a1,a2,…,ak](其中 0≤k≤n)。
长度为 m 的数组 b 被称为好数组,如果可以通过重复执行以下操作 m 次(初始时 c 为空数组),从 b 得到一个非递减数组 c(即满足 c1≤c2≤⋯≤cm):
- 选择 b 的第一个或最后一个元素,将其从 b 中移除,并将其追加到数组 c 的末尾。
例如,若我们执行 4 次操作:依次取 b1、bm、bm−1、b2,则 b 变为 [b3,b4,…,bm−3],而 c=[b1,bm,bm−1,b2]。
考虑如下例子:b=[1,2,3,4,4,2,1]。该数组是好数组,因为我们可以按如下操作序列从它得到非递减数组 c:
- 取 b 的第一个元素,于是 b=[2,3,4,4,2,1],c=[1];
- 取 b 的最后一个元素,于是 b=[2,3,4,4,2],c=[1,1];
- 取 b 的最后一个元素,于是 b=[2,3,4,4],c=[1,1,2];
- 取 b 的第一个元素,于是 b=[3,4,4],c=[1,1,2,2];
- 取 b 的第一个元素,于是 b=[4,4],c=[1,1,2,2,3];
- 取 b 的最后一个元素,于是 b=[4],c=[1,1,2,2,3,4];
- 取 b 中唯一剩下的元素,于是 b=[],c=[1,1,2,2,3,4,4] —— 此时 c 是非递减的。
注意:仅含一个元素的数组是好数组。
请输出为使 a 成为好数组所需删除的最短前缀的长度。注意,该长度可以为 0。
你需要回答 t 个相互独立的测试用例。
输入格式
The first line of the input contains one integer t (1≤t≤2⋅104) — the number of test cases. Then t test cases follow.
The first line of the test case contains one integer n (1≤n≤2⋅105) — the length of a. The second line of the test case contains n integers a1,a2,…,an (1≤ai≤2⋅105), where ai is the i-th element of a.
It is guaranteed that the sum of n does not exceed 2⋅105 (∑n≤2⋅105).
输入的第一行包含一个整数 t(1≤t≤2⋅104),表示测试用例的数量。随后是 t 个测试用例。
每个测试用例的第一行包含一个整数 n(1≤n≤2⋅105),表示数组 a 的长度。每个测试用例的第二行包含 n 个整数 a1,a2,…,an(1≤ai≤2⋅105),其中 ai 是数组 a 的第 i 个元素。
保证所有测试用例中 n 的总和不超过 2⋅105(即 ∑n≤2⋅105)。
输出格式
For each test case, print the answer: the length of the shortest prefix of elements you need to erase from a to make it a good array.
对于每个测试用例,输出答案:需要从数组 a 中删除的最短前缀的长度,使得剩余数组成为一个“好”数组。
输入输出样例
输入#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 a is already good, so we don't need to erase any prefix.
In the second test case of the example, the initial array a is not good. Let's erase first 4 elements of a, the result is [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.
在示例的第一个测试用例中,数组 a 已经是“好”的,因此我们无需删除任何前缀。
在示例的第二个测试用例中,初始数组 a 不是“好”的。让我们删除 a 的前 4 个元素,结果为 [4,5,2]。该结果数组是“好”的。可以证明:若删除更少的前导元素,则结果将不是“好”的。
输入解题思路,AI测评打分。不知道怎么写?