【题解】牛牛出队
题意
给你一个有个元素的队列
,你可以先从队列的队首出队
个元素,然后对于剩下的元素你可以任意选择从队首或队尾出队,使得之后的元素出队组成的序列为一个非递减序列。求最小的
。
题解
首先若队列中的元素一开始就递增或递减,那么不需要提前出队答案就是。否则我们从队列的后边开始考虑,从后往前找到第一个先递增后递减的序列(逆序考虑),答案就是
减去这个序列的长度,若含有两个这个的序列,这说明无论怎么出队都会出现递减的情况。
复杂度
时间复杂度
代码
#include<bits/stdc++.h> using namespace std; const int N=2e5+5; int a[N]; int main() { int t; scanf("%d",&t); while(t--) { int n; scanf("%d",&n); for(int i=1; i<=n; i++) scanf("%d",&a[i]); a[0]=-1; int cnt=0,flag=0; for(int i=n; i>=1; i--) if(a[i-1]<a[i]) cnt=1; else if(cnt&&a[i-1]>a[i]) { printf("%d\n",i-1); flag=1; break; } if(!flag) printf("0\n"); } return 0; }