Make It Good 题意: 给定一个数组,让我们删除一个最小前缀数组,然后得到一个C数组,C数组满足, 每次拿首尾(先拿尾,或者先拿首)数字放到一个新数组中,最后使其变成有序的。 思路: 我们观察C数组会发现,C数组是一个凸型(小->大->小),题目又告诉删除最小前 缀数组,那么我们可以从后往前遍历,求一个后缀数组凸型即可。 AC代码 #include<iostream> #include<cstdio> #include<vector> #include<cstring> #include<algorithm> using namespace std; const int maxn=2e5+5; int arr[maxn]; int main(){ int t, n; scanf("%d", &t); while (t--){ scanf("%d", &n); for (int i=1; i<=n; ++i){ scanf("%d", &arr[i]); } int i,j; for(i=n; i>=2; --i){ if (arr[i] > arr[i-1]) break; } for(j=i ; j>=2; --j){ if (arr[j] < arr[j-1]) break; } printf("%d\n", j-1); } return 0; }